จะเปลี่ยนเส้นทางเอาต์พุตแบบสอบถาม reg reg ด้วย 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 comparison ด้วยแต่ไม่สามารถใช้งานได้เพราะฉันไม่ได้ใช้ไคลเอนต์อื่นเพื่อเปรียบเทียบรีจิสตรีด้วย ด้วยเหตุผลบางประการ ฉันไม่สามารถผสมสวิตช์และคำสั่งใดๆ เข้าด้วยกันเพื่อให้ทำงานได้ตามต้องการ หากฉันได้รับผลลัพธ์ที่ต้องการ แสดงว่า 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 _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%

ตัวอย่างนี้มี VLAUE ข้อมูลที่ไม่ตรงกัน จำเป็นต้องมีการดำเนินการ

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 (แสดงข้อมูลเฉพาะที่ฉันต้องการเพิ่มหรือแก้ไข) หากสามารถพิมพ์จากข้อความสั่งทั้งหมดได้จะเหมาะสมที่สุดและจำกัดการค้นหาและแก้ไขของฉันให้เหลือเฉพาะข้อมูลค่าที่ไม่ตรงกันและหากคีย์ยังไม่ได้ ปัจจุบัน.


person Terrence    schedule 19.06.2013    source แหล่งที่มา


คำตอบ (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
person Endoro    schedule 19.06.2013
comment
เกิดอะไรขึ้นกับโพสต์ติดตามผลของฉัน? - person Terrence; 21.06.2013
comment
Endoro ที่ให้คีย์และค่าแก่ฉัน แต่ฉันต้องการข้อมูลเฉพาะจาก findstr (หรืออะไรก็ได้ที่สามารถใช้ได้) ควรเปลี่ยนเส้นทางไปยังไฟล์ มีวิธีใดบ้างที่จะรวม findstr (ข้อมูลที่ไม่ตรงกันโดยเฉพาะ) ไว้ในคำสั่งของคุณ? - person Terrence; 21.06.2013
comment
findstrควรทำอย่างไรกันแน่? - person Endoro; 21.06.2013
comment
Endoro ดูโพสต์ที่แก้ไขของฉันเพื่อดูคำตอบสำหรับคำถามของคุณเกี่ยวกับ findstr - person Terrence; 24.06.2013
comment
ฉันจะดูข้างในในภายหลังในวันนั้น ในระหว่างนี้ คุณสามารถอ่านเกี่ยวกับการเปลี่ยนเส้นทางได้ - person Endoro; 24.06.2013