该脚本只是原始完整文件中大约 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. 如果键或数据都存在,则将输出重定向到文件 a . 我希望结果与不匹配的注册表项一起显示 不匹配的注册表项的重定向输出将是我将手动查看的输出。
以下代表我尝试获取我请求的数据。我以许多不同的方式应用了许多不同的开关(/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
Endoro——由于评论限制,我在这里回答。你的陈述给了我迄今为止我需要的大部分数据——谢谢!我已经尝试了几十种不同的构造!匹配我需要的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 查询语句确实标识了正确的值,但没有打印出该值应该是什么(这个语句需要采取行动——在这种情况下是数据值应为 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
(向我显示我需要添加或修改的特定数据),如果它可以从所有语句中打印将是理想的,并将我的搜索和编辑限制为仅不匹配的值数据并且如果键不存在.