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