【发布时间】: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