我正在编写一个脚本来查找注册表值并将该值返回到 Windows 命令提示符屏幕,并将其添加到 .txt 文件中。我已经到了需要测试机器是 32 位还是 64 位的地步,这样我就知道使用哪个命令在注册表中找到我需要的值。
我正在按照我在下面写的内容寻找逻辑:
如果是 32 位,则(运行此命令)否则(运行此命令)
我希望不必有任何文本文件或此脚本工作所需的任何其他内容。以下是我到目前为止的代码。由于注册表位置是私有的,我将位置更改为一个虚构的位置。(注意:我确实有一个文本文件,该脚本从中读取我插入计算机和服务器的名称。到目前为止,我的代码可以工作,但是使用 2 个注册表查找命令,当它检查 32 位机器时,我显然没有得到正确的结果对于 64 位注册表位置)
@echo off
Setlocal
::sets the ldt variable to the local date and time in yyyymmdd_hhmmss
for /f "skip=1" %%c in ('wmic os get LocalDateTime') do set ldt=%%c
set ldt=%ldt:~0,8%_%ldt:~8,6%
::searches for computer names in servers.txt and then calls server sub routine. Once it goes back to the for loop it moves onto the next line in servers.txt
for /f %%c in (servers.txt) do (
set server=%%c
call:server
)
pause
goto:eof
--------------------------------------------------------------------
:server
set stamp=%date% at %time%
set DateTime=%stamp%
::Tests for a good ping, if no ping then move onto next machine
ping -n 1 -w 250 %server% > nul
if %errorlevel% NEQ 0 (
ECHO No Ping on %server%
ECHO No Ping on %server% >>AuditScript_%ldt%.txt
goto:eof
)
call:screen
call:log
goto:eof
--------------------------------------------------------------------
:screen
echo.
echo Computer name: %server%
reg query "\\%server%\HKLM\SOFTWARE\Registry Folder1\Information\" /V "Datavalue" | FIND "Datavalue"
reg query "\\%server%\HKLM\SOFTWARE\Wow6432Node\Registry Folder1\Information" /V "Datavalue" | FIND "Datavalue"
echo.
goto:eof
--------------------------------------------------------------------
:log
echo. >>AuditScript_%ldt%.txt
echo Registry value for %server% on %stamp% >>AuditScript_%ldt%.txt
reg query "\\%server%\HKLM\SOFTWARE\Registry Folder1\Information\" /V "Datavalue" | FIND "Datavalue" >>AuditScript_%ldt%.txt
reg query "\\%server%\HKLM\SOFTWARE\Wow6432Node\Registry Folder1\Information" /V "Datavalue" | FIND "Datavalue" >>AuditScript_%ldt%.txt
echo. >>AuditScript_%ldt%.txt
goto:eof
--------------------------------------------------------------------