差异 REG QUERY 本地与远程计算机批处理脚本
Discrepancy REG QUERY local vs remote computer batch script
我正在编写批处理脚本来更新软件包(卸载旧的
版本/安装新版本)。这需要通过网络完成,因为
有 500 台电脑要更新。卸载前的第一步是检查是否安装了该软件。为了检查
我查询注册表:
reg query "HKLM\SOFTWARE\A.E.T Europe B.V."
当 运行 在本地(出于测试目的)时,此查询给出了适当的结果,但是当我 运行 它远程时(他们会这样
运行) returns 错误的结果。
reg query "\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
returns 0 如果我 运行 那条线在本地。但是如果我登录 I301 并且 运行
本地查询returns 1、正在A.E.T欧洲B.V的真相。显示在 windows 注册表中的 Wow6432Node b运行ch 下。
这是为什么???
提前致谢!
如果在 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
的命令[=25]时找不到密钥=]
reg query "\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
但是如果在处理批处理文件时执行32位%SystemRoot%\SysWOW64\reg.exe
或者运行使用32位%SystemRoot%\SysWOW64\cmd.exe
的命令[=25] =]
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 文档页面:
Mofi 的回答很好。在 64 位系统上,您还可以考虑使用
/reg:32 & /reg:64
请参阅注册查询 /?
如果您从其他应用启动 CMD.exe,有时会遇到麻烦。如果该应用程序是 32 位应用程序,它将启动 CMD.exe
的 32 位版本
感谢 Mofi 和 RGuggisberg,
发现当天晚些时候 Mofi 所说的一切(RGuggisberg 补充)。因为我无法让它工作,所以我尝试检查注册表中的 Uninstall 条目,认为它会存在并且只会存在。再次获得类似的结果后,我做了更多的谷歌搜索,发现 Windows 在注册表中有两棵树:一个用于 32 位应用程序,另一个用于 64 位应用程序。提示来自:
最后它显示了 RGuggisber 提到的两个选项 /reg:32 和 /reg:64。查找它们,发现两个注册表都存在。
使用 /reg:64 尝试了相同的查询(已卸载),但找到了我正在寻找的密钥。用 /reg:32 试过,确实找不到。我是 运行 脚本的机器运行 Windows 7 32 位。远程机器Windows 8.1 64位.
我正在编写批处理脚本来更新软件包(卸载旧的 版本/安装新版本)。这需要通过网络完成,因为 有 500 台电脑要更新。卸载前的第一步是检查是否安装了该软件。为了检查 我查询注册表:
reg query "HKLM\SOFTWARE\A.E.T Europe B.V."
当 运行 在本地(出于测试目的)时,此查询给出了适当的结果,但是当我 运行 它远程时(他们会这样 运行) returns 错误的结果。
reg query "\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
returns 0 如果我 运行 那条线在本地。但是如果我登录 I301 并且 运行 本地查询returns 1、正在A.E.T欧洲B.V的真相。显示在 windows 注册表中的 Wow6432Node b运行ch 下。
这是为什么???
提前致谢!
如果在 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
的命令[=25]时找不到密钥=]
reg query "\I301\HKLM\SOFTWARE\A.E.T Europe B.V."
但是如果在处理批处理文件时执行32位%SystemRoot%\SysWOW64\reg.exe
或者运行使用32位%SystemRoot%\SysWOW64\cmd.exe
的命令[=25] =]
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 文档页面:
Mofi 的回答很好。在 64 位系统上,您还可以考虑使用
/reg:32 & /reg:64 请参阅注册查询 /?
如果您从其他应用启动 CMD.exe,有时会遇到麻烦。如果该应用程序是 32 位应用程序,它将启动 CMD.exe
的 32 位版本感谢 Mofi 和 RGuggisberg,
发现当天晚些时候 Mofi 所说的一切(RGuggisberg 补充)。因为我无法让它工作,所以我尝试检查注册表中的 Uninstall 条目,认为它会存在并且只会存在。再次获得类似的结果后,我做了更多的谷歌搜索,发现 Windows 在注册表中有两棵树:一个用于 32 位应用程序,另一个用于 64 位应用程序。提示来自:
最后它显示了 RGuggisber 提到的两个选项 /reg:32 和 /reg:64。查找它们,发现两个注册表都存在。
使用 /reg:64 尝试了相同的查询(已卸载),但找到了我正在寻找的密钥。用 /reg:32 试过,确实找不到。我是 运行 脚本的机器运行 Windows 7 32 位。远程机器Windows 8.1 64位.