此脚本只是原始完整文件中大约200-300个注册表语句的一部分。它根据每个reg add语句设置所有注册表设置。但是,应用此脚本显然可能会破坏某些内容或所有内容。 该脚本将应用于Windows 2008 R2服务器。 原始陈述
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f
在应用此脚本之前,我想要完成的是: 1.查询每个密钥以检查密钥是否存在正确的数据 2.如果存在密钥和正确数据,则无需执行任何操作 3.如果存在密钥或数据,则将输出重定向到文件 一个。我希望结果与不匹配的注册表项一起显示 不匹配的注册表项的重定向输出将是我将手动审核的。
以下代表我尝试派生我要求的数据。我已经应用了许多不同的开关(/f /d |
(管道)和findstr
)以及许多不同方式的重定向都没有运气。我还查看了reg compare命令,但它不适用,因为我没有使用其他客户端来比较注册表。出于某种原因,我无法根据需要获得任何开关和命令的组合。如果我得到所需的输出,则findstr
无法正确验证。或者,如果findstr
正确验证,则输出不会显示。 findstr
结果似乎是合乎逻辑的陈述,但结果未正确验证
恩。 >> C:\Users\AIODUDE\Documents\results.csv
reg query"HKLM\Software\_reg_test" /v STIG_test | findstr /E "0"
if %ERRORLEVEL% EQU 0 echo I match >> C:\Users\AIODUDE\Documents\results.csv
if %ERRORLEVEL% NEQ 0 echo No match >> C:\Users\AIODUDE\Documents\results2.csv
请记住,此脚本包含大约200-300个注册表添加语句。
::all reg add keys are only set to do not read during testing
::reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous > D:\results.csv
if %ERRORLEVEL% EQU 0 echo I match >> D:\results.csv
if %ERRORLEVEL% NEQ 0 echo No match >> D:\results.csv
::reg add "HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\EventLog\Setup" /v MaxSize /t REG_DWORD /d 32768 /f
reg query "HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\EventLog\Setup" /v MaxSize >> D:\results.csv
if %ERRORLEVEL% EQU 0 echo I match >> D:\results.csv
if %ERRORLEVEL% NEQ 0 echo No match >> D:\results.csv
::reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer" /v AlwaysInstallElevated /t REG_DWORD /d 0 /f
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer" /v AlwaysInstallElevated >> D:\results.csv
if %ERRORLEVEL% EQU 0 echo I match >> D:\results.csv
if %ERRORLEVEL% NEQ 0 echo No match >> D:\results.csv
pause
findstr
匹配我需要的确切数据。以下示例适用,但如果未找到密钥则重定向输出。我决定使用set语句来编辑数百行更容易:
set _results=C:\Users\AIODUDE\Documents\xresultsd.txt
set _NEQ=%_results% 2>&1 && echo success || echo FAIL >> %_results%
set _EQU=%_results% 2>&1 && echo success || echo FAIL >> %_results%
这个例子很好 如果匹配,输出状态(我匹配 - 所以这个键是好的,没有进一步的动作)。
reg query "HKLM\Software\_reg_test" /f STIG_test /e >>%_results%
reg query "HKLM\Software\_reg_test" /v STIG_test | findstr "0"
if %ERRORLEVEL% NEQ 0 echo No match >>%_NEQ%
if %ERRORLEVEL% EQU 0 echo I match >>%_EQU%
此示例中存在非匹配数据 需要采取措施。
REG Query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /f RestrictAnonymous /e >>%_results%
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous | findstr "1"
if %ERRORLEVEL% NEQ 0 echo No match >>%_NEQ%
if %ERRORLEVEL% EQU 0 echo I match >>%_EQU%
在此示例中,第一个reg查询语句仅搜索特定键并打印出键和数据值。但是,它不能识别正确的值应该是什么... 第二个reg查询语句确定ID正确的值但不打印该值应该是什么(此语句将需要操作 - 在这种情况下,此案例数据值应为0。
此示例注册表键未找到 需要采取措施。
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /f LmCompatibilityLevel /e >>%_results%
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel | findstr "5"
if %ERRORLEVEL% NEQ 0 echo No match >>%_NEQ%
if %ERRORLEVEL% EQU 0 echo I match >>%_EQU%
所以findstr
(向我显示我需要添加或修改的特定数据),如果它可以从所有语句打印出来,那将是理想的,并且限制我的搜索和编辑只限于不匹配的值数据如果密钥尚未存在。
答案 0 :(得分:2)
尝试这样:
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous >results.csv 2>&1 && echo success || echo FAIL >> results.csv
type results.csv