如何通过PowerShell远程批量查询域内计算机的Windows版本(如22H2)
解决PowerShell远程查询域内计算机Windows DisplayVersion的问题
常见问题原因及解决办法
1. 32位/64位注册表重定向导致路径错误
本地执行时默认用64位PowerShell访问原生HKLM路径,但远程会话可能默认使用32位PowerShell,会自动重定向到HKLM:\SOFTWARE\Wow6432Node,该路径下不存在DisplayVersion键值,从而报错。
解决方法:强制指定64位PowerShell会话执行命令:
Invoke-Command -ComputerName "PC01","PC02" -ScriptBlock { Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name DisplayVersion -ErrorAction Stop } -ConfigurationName Microsoft.PowerShell
-ConfigurationName Microsoft.PowerShell会强制使用64位PowerShell会话(对应64位注册表视图)。
2. 权限不足
确保执行命令的账号满足两个条件:
- 属于远程计算机的Remote Management Users组或本地管理员组,拥有WinRM远程访问权限
- 拥有读取远程计算机HKLM注册表项的权限
3. WinRM服务未配置或防火墙拦截
先确认远程计算机已开启WinRM服务:
在远程计算机上执行(需管理员权限):
winrm quickconfig
该命令会自动配置WinRM服务、开放防火墙默认端口(5985)。
更可靠的替代方案:使用CIM查询
直接通过WMI/CIM获取系统版本信息,避免注册表路径问题:
Invoke-Command -ComputerName "PC01","PC02" -ScriptBlock { (Get-CimInstance -ClassName Win32_OperatingSystem).DisplayVersion }
这种方法无需依赖注册表路径,兼容性更强,适用于绝大多数Windows版本。
内容的提问来源于stack exchange,提问作者Hosam Alharbi
相关产品推荐
相关产品推荐

