如何使用findstr重定向批处理reg查询输出?

时间:2013-06-19 07:23:27

标签: batch-file redirect cmd registry findstr

此脚本只是原始完整文件中大约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
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查询语句确定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(向我显示我需要添加或修改的特定数据),如果它可以从所有语句打印出来,那将是理想的,并且限制我的搜索和编辑只限于不匹配的值数据如果密钥尚未存在。

1 个答案:

答案 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