如何修复 "WinRS 客户端无法处理请求. WinrsCloseSendHandle 函数所需的参数为 null 或零. "
Windows远程管理 (WinRM) 错误 "The WinRS client cannot process the request. The parameter required for the WinrsCloseSendHandle function is null or zero" 通常发生在远程PowerShell或WinRS会话突然结束时,收到目标服务器的意想不到的零响应,或遇到客户端和主机之间的协议不匹配. 这意味着本地WinRM客户端试图关闭一个通信通道处理器,但从未正确初始化或已经被远程端无效化.
逐步修复问题
方法1:重新启动 WinRM 服务
最常见的原因是客户端或服务器上的停滞或损坏的服务状态.
- 按下
Windows Key + X并且选择 Terminal (Admin) 或是 Command Prompt (Admin). - 键入下面的命令重新启动您的本地机器上的WinRM服务:
net stop winrm && net start winrm - 如果您可以访问远程机器,请在目标服务器上执行同样的命令来重置其收听器状态.
方法2:将WinRM配置重置为默认设置
错误配置的传输参数或受损的收听器设置可能会导致会话谈判期间的零处理器.
- 打开 Command Prompt (Admin).
- 运行快速配置命令修复默认设置并启用防火墙例外:
winrm quickconfig - 它们的类型
y然后按下. Enter 当被要求做出所需的更改时.
方法3:增加 MaxShellsPerUser 和 MaxMemoryPerShellMB
If the remote server kills the session because it exceeds resource limits, the client will receive a null object, triggering this error. You need to run these commands on the target server.
- 打开 PowerShell (Admin) 在远程机器上.
- 通过运行检查当前的限制:
Get-Item WSMan:\localhost\Shell\* - 增加每个用户允许的最大并发 shell:
Set-Item WSMan:\localhost\Shell\MaxShellsPerUser 50 - 增加每个shell分配的内存,以防止内存丢失:
Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024 - 重新启动 WinRM 服务以应用更改:
Restart-Service winrm
方法4:更新或重新安装Windows管理框架 (WMF)
当客户端和服务器运行 PowerShell/WMF 的不同版本时会发生协议不匹配.
- 在两个机器上检查您的当前 PowerShell 版本,运行:
$PSVersionTable.PSVersion - 如果其中一个机器运行过时的版本 (如WMF 3.0或4.0),请从微软官方网站下载并安装最新兼容的Windows管理框架或PowerShell 7包,以确保两个节点使用相同的WS管理协议.
可能有一些错误.. Learn Microsoft