【问题标题】:How to redirect batch reg query output with findstr?如何使用 findstr 重定向批处理 reg 查询输出?
【发布时间】:2013-06-19 07:23:27
【问题描述】:

此脚本只是原始完整文件中大约 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.查询每个key,检查key是否存在且数据正确 2. 如果存在关键且正确的数据,则无需执行任何操作 3.如果key或者data不存在,将输出重定向到文件 一种。我希望结果与不匹配的注册表项一起显示 不匹配的注册表项的重定向输出将是我将手动查看的输出。

以下内容代表我尝试获取我请求的数据。我已经应用了许多不同的开关(/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——我在这里回答是因为 cmets 的限制。 你的陈述给了我迄今为止我需要的大部分数据——谢谢!我已经尝试了几十种不同的构造! 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(向我显示我需要添加或修改的特定数据),如果它可以从所有语句中打印将是理想的,并将我的搜索和编辑限制为仅不匹配的值数据,如果密钥不存在。

【问题讨论】:

    标签: batch-file redirect cmd registry findstr


    【解决方案1】:

    试试这样:

    reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous >results.csv 2>&1 && echo success || echo FAIL >> results.csv
    type results.csv
    

    【讨论】:

    • 我的后续帖子到底发生了什么?
    • Endoro 为我提供了键和值,但我需要 findstr 中的特定数据(或任何可以使用的数据),最好重定向到文件。有没有办法将 findstr (数据不明确匹配)合并到您的语句中?
    • findstr 究竟应该做什么?
    • Endoro,请参阅我编辑的帖子,了解您对 findstr 的问题的答案。
    • 我会在当天晚些时候查看。与此同时,您可以阅读redirection
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多