我无法连接PSRemote
到我的 Hyper-V 主机,也无法使用 Hyper-V 管理器连接到它。这发生在客户端虚拟机上,而不是服务器虚拟机上。我可以PSRemote
从服务器毫无问题地连接。
这是我的设置:
- [主机] 是 Hyper-V 2016
- [SERVER] 是 Server Essentials 2016 虚拟机
- [CLIENT] 是加入域的 VM,运行 Windows 10 v1607
- 我在域管理员帐户下同时登录了 [SERVER] 和 [CLIENT]
错误信息:
Enter-PSSession:连接到远程服务器 [HOST] 失败,并显示以下错误消息:WinRM 无法完成操作。验证指定的计算机名称是否有效,该计算机可通过网络访问,并且 WinRM 服务的防火墙例外已启用并允许从该计算机进行访问。默认情况下,公共配置文件的 WinRM 防火墙例外限制对同一本地子网中的远程计算机的访问。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。
[主机] 防火墙配置:
故障排除步骤:
- 我已将 [HOST] 上的 WinRM 防火墙条目设置为
All
配置文件和Any
远程地址 - 我已完全禁用 [HOST] 上的防火墙
- 我已经搜索了此处找到的故障排除步骤
- 我已在 [HOST] 上成功运行此命令:
C:\>winrm set winrm/config/client @{TrustedHosts="CLIENT"}
- 我已在 [HOST] 上成功运行此命令:
PS C:\> Enable-PSRemoting -Force
- 我已在 [CLIENT] 上启动 WinRM 服务
- 我已经查看了此问答,但那里提供的建议对我不起作用。
- 我在这里查看了所有的问答,但没有一个直接适用。我找到的最接近的是这个,但我不确定如何按照描述暂时禁用 [CLIENT] 上的 GPO。
[CLIENT] 上的 WinRM 事件日志显示以下错误:
命令:
Get-WinEvent -LogName Microsoft-Windows-WinRM/Operational -MaxEvents 10 | Where-Object {$_.LevelDisplayName -eq "Error"} | fl
结果:
TimeCreated : 3/18/2017 12:43:46 PM
ProviderName : Microsoft-Windows-WinRM
Id : 142
Message : WSMan operation CreateShell failed, error code 2150859046
TimeCreated : 3/18/2017 12:43:46 PM
ProviderName : Microsoft-Windows-WinRM
Id : 161
Message : WinRM cannot complete the operation. Verify that the specified computer name is valid, that the
computer is accessible over the network, and that a firewall exception for the WinRM service is enabled
and allows access from this computer. By default, the WinRM firewall exception for public profiles
limits access to remote computers within the same local subnet.
TimeCreated : 3/18/2017 12:43:46 PM
ProviderName : Microsoft-Windows-WinRM
Id : 138
Message : The client got a timeout from the network layer (ERROR_WINHTTP_TIMEOUT)
这也发生在我将 [HOST] 和 [SERVER] 从 2012R2 升级到 2016 之前,所以它让我相信这是 [CLIENT] 上的东西。
奇怪的是,升级后我暂时能够从 [CLIENT] 连接。我不记得这是否是在我打开 [SERVER] 上的默认安全 GPO 并从备份中导入我的自定义(非安全相关)GPO 设置之前;也许它可能与此有关?
[CLIENT] 上是否有我需要创建/启用的防火墙规则?我无法将防火墙作为故障排除步骤关闭,因为它由默认的 WSE GPO 管理;如前所述,我不知道如何暂时覆盖它(或者即使这样做是安全的)。
我当然没想到会是这个答案……
一时兴起,我尝试使用 FQDN(例如
host.domain.tld
)进行连接。Enter-PSSession
令我惊讶的是,它在Hyper-V 管理器和 Hyper-V 管理器下都顺利通过。它可能在 [CLIENT] 上的 TCP/IP DNS 设置中。我得检查一下。
但就目前而言,这可以解决问题。
- 编辑 -
好的,我知道了。
[CLIENT] 上的 hosts 文件有一条陈旧的记录,其中 [HOST] 的 IP 地址已过时。这就是为什么 WinRM 仅在我使用 FQDN 时才起作用的原因。
我删除了记录,一切都立即开始正常工作。