2

我正在尝试编写一个简单的 Bash 脚本来帮助我验证一些 Windows 注册表设置。所有数据都在文件夹(这是计算机的主机名)中,并且位于脚本中指定的路径中。最终目标是根据行尾的注册表项值来验证值设置不正确的主机。

作为脚本的参考,参数一是我要查找的注册表项,参数二是它应该是的值。如果$control匹配$value's 字符串末尾的内容,则应输出作为变量的机器名称$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,它会列出不正确的值。

以下是文本文件中的一些行,我需要能够区分两者,因此返回的值是针对该特定注册表项的:

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 中使用,因为如果找到匹配项则grep返回(success/true),否则返回(error/false)。01

(重要提示:以上假设$regkey并且$control不能包含任何grep可能特殊处理的元字符。如果可以,那么这将变得更加棘手。)

于 2012-10-03T21:17:09.253 回答