问题
I have a 2 servers running Windows Server 2012 R2. One of them is hosting a virtual machine running Windows 7 32-bit, and I am trying to use the other server to view the currently running processes of the virtual machine.
I had to use Enable-PSRemoting -SkipNetworkProfileCheck for anything to work. I also had to add the computers to each others TrustedHosts lists.
Get-Process -ComputerName VM01
will return a "Couldn't connect to remote machine". However,
Invoke-Command -ComputerName VM01 -ScriptBlock {Get-Process}
works just fine. What is the difference between using Invoke-Command and using the Get-Process with a ComputerName argument? In case it is important, I can also use Enter-PSSession without any problems
回答1:
Get-Process
probably uses the DCOM/RPC remoting protocol instead of Windows Remote Management (WinRM), which is what PowerShell Remoting (eg. Invoke-Command
) uses. If you have a firewall blocking DCOM/RPC, then I could see how Get-Process
with the -ComputerName
parameter would fail. With PowerShell Remoting (via WinRM), all you need to do is open up TCP 5985 (HTTP) and TCP 5986 (HTTPS, optional).
回答2:
I ran across this error my self today, the solution in my case (I already had enabled port 5985) the problem occurred because of my firewall blocked port 445 (on the target).
As soon as this port was enabled I was able to use,
Get-Process -ComputerName dc01
and
Get-Service -ComputerName dc01
However I do recommend you read this page: https://www.grc.com/port_445.htm as it seems that some security issues may appear upon allowing this port toward the Internet.
My symptoms was exactly as OP descripes...
来源:https://stackoverflow.com/questions/22357063/get-process-to-remote-computer-doesnt-work-but-invoke-command-does