我有2台运行Windows Server 2012 R2的服务器。其中一个是托管运行Windows 7 32位的虚拟机,我正在尝试使用其他服务器来查看当前正在运行的虚拟机进程。
我必须使用Enable-PSRemoting -SkipNetworkProfileCheck来完成任何工作。我还必须将计算机添加到彼此的TrustedHosts列表中。
Get-Process -ComputerName VM01
将返回“无法连接到远程计算机”。但是,
Invoke-Command -ComputerName VM01 -ScriptBlock {Get-Process}
工作得很好。使用Invoke-Command和将Get-Process与ComputerName参数一起使用有什么区别?如果它很重要,我也可以毫无问题地使用Enter-PSSession
答案 0 :(得分:6)
Get-Process
可能使用DCOM / RPC远程协议而不是Windows远程管理(WinRM),这是PowerShell远程处理(例如Invoke-Command
)使用的。如果您有防火墙阻止DCOM / RPC,那么我可以看到Get-Process
参数的-ComputerName
将失败。使用PowerShell Remoting(通过WinRM),您需要做的就是打开TCP 5985(HTTP)和TCP 5986(HTTPS,可选)。
答案 1 :(得分:3)
我今天遇到了这个错误,我的情况下的解决方案(我已经启用了端口5985)问题发生了,因为我的防火墙阻塞了端口445(在目标上)。
只要启用此端口,我就可以使用
Get-Process -ComputerName dc01
和
Get-Service -ComputerName dc01
但我建议您阅读本页: https://www.grc.com/port_445.htm 因为看起来在允许这个端口通往互联网时可能出现一些安全问题。
我的症状与OP描述完全相同......