我最近从2003年到2008年升级了许多服务器。自升级以来,我开始看到以下错误:
[servername]连接到远程服务器失败,并显示以下错误消息:WSMan服务无法启动主机进程来处理给定的请求。确保正确注册了WSMan提供程序主机服务器和代理。有关详细信息,请参阅about_Remote_Troubleshooting帮助主题。
错误似乎是随机的。该脚本将工作,然后失败。创建会话的命令处于循环中(创建会话,删除会话),并且作为一组部署脚本的一部分被多次调用。当脚本失败时,它会在不同的点失败。
我已经检查了本地工作站(win7)目标服务器(win2008R2)上的事件日志,但没有我能看到的错误。
这是随机失败的行:
$ session = New-PSSession -ComputerName $ serverName -Credential $ credential
我在Win2003上没有看到这个问题。脚本没有改变。我假设问题出在目标服务器上,但无法找到任何错误或日志来查看。它将工作一次然后失败,因此我的部署脚本有时会成功,然后在不同的点失败。
非常感谢有关追踪此问题的任何指导。
答案 0 :(得分:1)
您需要设置WSMan TrustedHosts。如果需要,可以使用通配符(*)将其设置为所有内容。
您可以通过PowerShell:Set-Item WSMan:\localhost\Client\TrustedHosts -Value *
。
请记住,您还需要启用Windows远程服务。为此,请使用本机winrm qc
命令。 Enable-PSRemoting -Force
也可以这样做。
您还可以使用Sysinternals的PSExec工具。请记住,这些工具可能会被EndPoint Security阻止,因此请不要将其列入白名单。
是否有特定原因将旧操作系统迁移到较新的版本,但仍是EOL操作系统?您可以在2008R2中通过PowerShell进行很多操作,但是仍然非常有限。 IMO,从2012R2开始,最好使用PowerShell。
答案 1 :(得分:0)
您是否通过创建崩溃并让进程保持打开状态的pssessions来达到进程数限制?
默认限制为15.我同意上述注释而不使用会话,而是使用invoke-command,如:
invoke-command -scriptblock $scriptBlock -ArgumentList $args -computername $compName -Credential $encodedRemoteCredentials
检查你的限制:
PS C:\aws> ls WSMan:\localhost\Shell
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Shell
Name Value
---- ----
MaxProcessesPerShell 15
作为快速而肮脏的测试 - 下次您的pssession版本的脚本失败时,使用set-item cmdlet将maxProcessesPerShell限制增加到50并重试。如果脚本不再失败,您就知道这是问题(并且应该考虑转移到invoke-command!)。
答案 2 :(得分:0)
尝试使用非管理员帐户连接到 localhost 时,您可能会收到此错误。
过去可以使用不是管理员的帐户,但出于安全原因,2019 年 1 月的 Windows 更新禁用了该功能。来自patch notes:
<块引用>默认情况下,PowerShell 远程处理仅适用于管理员帐户,但可以配置为使用非管理员帐户。从此版本开始,您无法将 PowerShell 远程端点配置为使用非管理员帐户。尝试使用非管理员帐户时,将出现以下错误:“New-PSSession: [computerName] Connecting to remote server localhost failed with the following error message: The WSMan service could not launch a host process to process the given request .确保 WSMan 提供程序主机服务器和代理已正确注册。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。”