WinRM服务正在运行,但不会回应

我有一个主机上有16虚拟主机的环境。 他们都运行Windows2008R2。 有一次我有PowerShell远程工作在所有的服务器,但一个。 然后我又失去了两个接触。 至less可以这么说,这很烦人。 每当我回到WinRM作为服务运行的事实,但它仍然不起作用。

它被设置为使用ssl。 Invoke-Command -ComputerName "BadMachine" -ScriptBlock {Get-Service | Where-Object {($_.Name -eq "WinRM") -and ($_.Status -eq "Running")}} -ErrorAction Stop -UseSSL -Credential(Get-Credential) Invoke-Command -ComputerName "BadMachine" -ScriptBlock {Get-Service | Where-Object {($_.Name -eq "WinRM") -and ($_.Status -eq "Running")}} -ErrorAction Stop -UseSSL -Credential(Get-Credential)结果众所周知

 [BadMachine] Connecting to remote server BadMachine failed with the following error message : WinRM cannot complete the operation. Verify... etc.,etc.,etc. 

在坏机器上,“winrm quickconfig”表示WinRM服务已经在运行,然后显示上述错误。

在坏的机器上, Get-Service "WinRM"返回一个很好的对象,说服务正在运行。

在坏机器winrm id不会返回任何东西(在好的机器上它会给出一个完整的IdentifyResponse)。

winrm get wmicimv2/Win32_Service?Name=WinRM给出了上述错误(在一台好机器上它返回状态)。

cd wsman:允许我切换到wsman提供程序,并且有localhost。 但在导航到本地主机之后,没有任何内容。 所以, cd WSMan:\localhost\Listener导致Cannot find path

netsh http show urlacl不会导致任何事情(在一个好的机器上它返回URL保留。)

大多数文章描述如何设置PowerShell远程,并可能讨论如何解决一些部分。 但是,显然Winrm和PowerShell远程控制可能会出错,我的问题是:

如何修复这个WinRM安装? 他们是Hyper-V主机上的虚拟机是否会使事情变得复杂? 为了解决问题的核心,还有哪些方面需要testing?

WinRM架构上的一篇文章让我调查了Http.sys。 由于IIS运行正常,我不会怀疑Http.sys。 命令netsh http show urlacl显示没有保留的url。

https://support.microsoft.com/en-us/help/820129/http.sys-registry-settings-for-windows帮助我比较坏机器的registry与一台好机器。 在坏的机器上不存在HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ HTTP \ Parameters \ UrlAclInfo的registry值。 此外,HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ HTTP \ Parameters \ SslBindingInfo \ 0.0.0.0:5986(绑定为winrm)的值不存在。 我不知道是什么原因造成的。

由于我的环境中的所有服务器看起来都差不多,所以我导出了上面的密钥,并将密钥导入到坏机器的registry中。 我想这只有在两台机器相似的情况下才有可能。 但是,它解决了我的问题。 在运行Enable-PSRemoting我现在可以访问环境中的所有机器。

通过实验,我发现SslBindingInfo( netsh http show sslcert )应该显示端口5986(winrm,你想用于-UseSSL的证书)的绑定,acl应该包含端口5357和5358的预留(http和https用于networking发现?),47001(http,wsman),5985和5986(http和https for winrm)。