如何修复 "WinRM客户端无法处理请求.资源URI不有效:它不包含密钥,但所选类不是单元.
在WS管理协议中, singleton class 是一个只有一个实例 (例如,操作系统配置或本地时间) 的类.对于单元类,Resource URI足以定位资源.然而,对于可以有多个实例 (如本地用户,网络适配器或服务) 的标准类,您必须提供特定的密钥 (如名称或ID),以便 WinRM 确切知道您想要管理的实例.如果您使用没有这些密钥的基本 URI 针对多实例类,WinRM 将拒绝请求.
逐步修复问题
根据您执行命令的方式,使用以下方法之一来解决问题:
方法1:在命令中提供所需的密钥
如果您正在使用 Get-WSManInstance 或类似的WSMan cmdlets, 您必须通过特定实例键使用 -SelectorSet 参数
- 打开 PowerShell 作为一个管理员.
- 修改命令以包含您要查询的实例的确切密钥.
- 错误 (导致错误):
Get-WSManInstance -ResourceURI "wmicimv2/Win32_Service" -ComputerName "RemotePC" - 正确 (使用选择器设置修复):
Get-WSManInstance -ResourceURI "wmicimv2/Win32_Service" -SelectorSet @{Name="wuauserv"} -ComputerName "RemotePC"(注: 取代
"wuauserv"您需要向的特定服务名称或实例密钥).
- 错误 (导致错误):
方法2:切换到CIM或WMI Cmdlet (建议)
如果您的目标仅仅是查询或管理远程Windows管理仪器 (WMI) 类,使用CIM cmdlets更容易,因为它们通过WinRM自动处理实例格式化.
- 打开 PowerShell.
- 而不是使用原始的WS-Management cmdlets,使用
Get-CimInstance.- 固定命令:
Get-CimInstance -ClassName Win32_Service -ComputerName "RemotePC"
- 固定命令:
- 如果您想要在没有手动 URI 构建的情况下对特定实例进行过,则添加过参数:
- 设置过器命令:
Get-CimInstance -ClassName Win32_Service -Filter "Name = 'wuauserv'" -ComputerName "RemotePC"
- 设置过器命令:
方法 3: 修复 WinRM 连接终点配置
如果在使用第三方管理软件或自动脚本时出现此错误,则可能是软件输入错误的默认配置终点.
- 打开 PowerShell 作为一个管理员.
- 检查您当前的 WinRM 收听器配置,运行:
winrm e winrm/config/listener - 将 WinRM 配置重置到默认的安全设置,以清除无效的自定义路由URI:
winrm quickconfig -q - 重新启动 WinRM 服务以应用更改:
Restart-Service WinRM
可能有一些错误.. Learn Microsoft