Windows 差异注册表查询本地与远程计算机批处理脚本

Windows 差异注册表查询本地与远程计算机批处理脚本,windows,batch-file,remote-registry,Windows,Batch File,Remote Registry,我正在编写一个批处理脚本来更新软件包(卸载旧的 版本/安装新版本)。这需要通过网络来完成 有500台电脑需要更新。卸载前的第一步是检查是否安装了软件。为了检查 我查询注册表: reg query "HKLM\SOFTWARE\A.E.T Europe B.V." 当在本地运行时(出于测试目的),此查询会给出精确的结果,但当我远程运行时(它们将以正确的方式运行) ran)返回错误的结果 reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V." 如果在

我正在编写一个批处理脚本来更新软件包(卸载旧的 版本/安装新版本)。这需要通过网络来完成 有500台电脑需要更新。卸载前的第一步是检查是否安装了软件。为了检查 我查询注册表:

reg query "HKLM\SOFTWARE\A.E.T Europe B.V."
当在本地运行时(出于测试目的),此查询会给出精确的结果,但当我远程运行时(它们将以正确的方式运行) ran)返回错误的结果

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
如果在本地运行该行,则返回0。但是如果我登录I301并运行 查询本地返回1,即A.E.T Europe B.V.在windows注册表的WOW6432节点分支下显示的事实

这是为什么


提前谢谢

如果64位Windows上有

HKLM\SOFTWARE\Wow6432Node\A.E.T Europe B.V.
但是没有钥匙

HKLM\SOFTWARE\A.E.T Europe B.V.
产生不同结果的原因很可能是由于从批处理文件或命令行执行了哪个版本的
reg.exe

如果在处理批处理文件时执行64位
%SystemRoot%\System32\reg.exe
,或在使用行的64位
%SystemRoot%\System32\cmd.exe
上运行命令,则找不到密钥

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
reg query "HKLM\SOFTWARE\A.E.T Europe B.V."
但是,如果在处理批处理文件时执行32位
%SystemRoot%\SysWOW64\reg.exe
,或者在使用行的32位
%SystemRoot%\SysWOW64\cmd.exe运行命令时,会找到密钥

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
reg query "HKLM\SOFTWARE\A.E.T Europe B.V."
因为对于32位应用程序,注册表重定向程序会将对
HKLM\SOFTWARE
的注册表访问重定向到
HKLM\SOFTWARE\Wow6432Node

检查两个可能的关键位置:

@echo off
%SystemRoot%\System32\ping.exe -n 1 I301 >nul
if errorlevel 1 (
    echo Computer with name I301 is not available in network.
    goto :EOF
)

%SystemRoot%\System32\reg.exe query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V." >nul 2>&1
if not errorlevel 1 goto Installed
%SystemRoot%\System32\reg.exe query "\\I301\HKLM\SOFTWARE\Wow6432Node\A.E.T Europe B.V." >nul 2>&1
if not errorlevel 1 goto Installed

echo A.E.T Europe B.V. is not installed.
goto :EOF

:Installed
echo A.E.T Europe B.V. is installed already.
另请参见Microsoft文档页面:


如果64位Windows上有

HKLM\SOFTWARE\Wow6432Node\A.E.T Europe B.V.
但是没有钥匙

HKLM\SOFTWARE\A.E.T Europe B.V.
产生不同结果的原因很可能是由于从批处理文件或命令行执行了哪个版本的
reg.exe

如果在处理批处理文件时执行64位
%SystemRoot%\System32\reg.exe
,或在使用行的64位
%SystemRoot%\System32\cmd.exe
上运行命令,则找不到密钥

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
reg query "HKLM\SOFTWARE\A.E.T Europe B.V."
但是,如果在处理批处理文件时执行32位
%SystemRoot%\SysWOW64\reg.exe
,或者在使用行的32位
%SystemRoot%\SysWOW64\cmd.exe运行命令时,会找到密钥

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
reg query "HKLM\SOFTWARE\A.E.T Europe B.V."
因为对于32位应用程序,注册表重定向程序会将对
HKLM\SOFTWARE
的注册表访问重定向到
HKLM\SOFTWARE\Wow6432Node

检查两个可能的关键位置:

@echo off
%SystemRoot%\System32\ping.exe -n 1 I301 >nul
if errorlevel 1 (
    echo Computer with name I301 is not available in network.
    goto :EOF
)

%SystemRoot%\System32\reg.exe query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V." >nul 2>&1
if not errorlevel 1 goto Installed
%SystemRoot%\System32\reg.exe query "\\I301\HKLM\SOFTWARE\Wow6432Node\A.E.T Europe B.V." >nul 2>&1
if not errorlevel 1 goto Installed

echo A.E.T Europe B.V. is not installed.
goto :EOF

:Installed
echo A.E.T Europe B.V. is installed already.
另请参见Microsoft文档页面:


    • 外交部的回答很好。在64位系统中,您也可以考虑使用

      /注册号:32和/注册号:64 参见REG QUERY/


      如果您从其他应用程序启动CMD.exe,有时可能会遇到麻烦。如果该应用程序是32位应用程序,它将启动32位版本的CMD.exe

      Mofi的正确答案。在64位系统中,您也可以考虑使用

      /注册号:32和/注册号:64 参见REG QUERY/


      如果您从其他应用程序启动CMD.exe,有时可能会遇到麻烦。如果该应用程序是32位应用程序,它将启动32位版本的CMD.exe

      谢谢Mofi和RGuggisberg

      当天晚些时候,我发现了Mofi所说的一切(以及RGuggisberg的补充)。因为我无法让它工作,我尝试在注册表中检查卸载条目,认为它会在那里,而且只会在那里。在再次得到类似的结果后,我又在谷歌上搜索了一下,发现Windows的注册表中有两棵树:一棵树用于32位应用程序,另一棵树用于64位应用程序。暗示来自:

      最后,它显示了RGuggisber提到的两个选项/reg:32和/reg:64。查了一下,发现两个注册中心都存在


      尝试了相同的查询(用于卸载),但使用了/reg:64并找到了我要查找的密钥。尝试使用/reg:32,但确实找不到它。我运行脚本的机器运行Windows7 32位。远程计算机Windows 8.1 64位。

      感谢Mofi和RGuggisberg

      当天晚些时候,我发现了Mofi所说的一切(以及RGuggisberg的补充)。因为我无法让它工作,我尝试在注册表中检查卸载条目,认为它会在那里,而且只会在那里。在再次得到类似的结果后,我又在谷歌上搜索了一下,发现Windows的注册表中有两棵树:一棵树用于32位应用程序,另一棵树用于64位应用程序。暗示来自:

      最后,它显示了RGuggisber提到的两个选项/reg:32和/reg:64。查了一下,发现两个注册中心都存在

      尝试了相同的查询(用于卸载),但使用了/reg:64并找到了我要查找的密钥。尝试使用/reg:32,但确实找不到它。我运行脚本的机器运行Windows7 32位。远程计算机支持Windows 8.1 64位