2

いくつかの Windows レジストリ設定を確認するのに役立つ単純な Bash スクリプトを作成しようとしています。すべてのデータはフォルダー (コンピューターのホスト名) 内にあり、スクリプトで指定されたパスにあります。最終的な目標は、行末のレジストリ キーの値に基づいて、値が正しく設定されていないホストを確認することです。

スクリプトの参考として、パラメータ 1 は探したいレジストリ キーで、パラメータ 2 は本来あるべき値です。$controlの文字列の末尾にあるものと一致する場合$value、変数であるマシン名を出力する必要があります$FOLDER

list=$(ls)
regkey=$1
control=$2

for FOLDER in $list
do
value=$($FOLDER/policies/Effective-Security-policy.txt | grep "$regkey")
if [[ "$value" =~ $control ]] ;
    then
        echo $FOLDER
    else
        continue
fi  
done

ただし、厳密な比較を行うことはできません。という名前のレジストリ キーもあり、RestrictAnonymousSAM正しくない値が一覧表示されるためです。

テキスト ファイル内の行の一部を次に示します。この 2 つを区別できるようにする必要があるため、返される値はその特定のレジストリ キーのものです。

MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,0
MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM=4,1
4

1 に答える 1

0

あなたがやろうとしていることを正しく理解しているなら、次のように書くべきだと思います:

regkey="$1"
control="$2"

for FOLDER in * ; do
  file="$FOLDER/policies/Effective-Security-policy.txt"
  if iconv -s -f utf-16 -t utf-8 "$file" \
       | grep -q '^[^=]*\\'"$regkey=$control$"
  then
    echo "$FOLDER"
  fi    
done

grep -qパターンに一致する行をファイルで検索しますが、それらは出力しませ。これは、一致が見つかった場合は (成功/真) を返し、そうでない場合は (エラー/偽)を返すため、 if-tests での使用に適しています。grep01

(重要な注意: 上記では、特別に扱われる可能性のあるメタ文字を と に含めることはできない$regkeyと想定しています。できる場合、これはより複雑になります。)$controlgrep

于 2012-10-03T21:17:09.253 に答える