Get-Process для удаленного компьютера не работает, но Invoke-Command работает
У меня есть 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
2 ответа
Get-Process
вероятно, вместо протокола удаленного управления Windows (WinRM) используется протокол удаленного управления DCOM/RPC (например, PowerShell Remoting). Invoke-Command
) использует. Если у вас есть брандмауэр, блокирующий DCOM/RPC, то я могу увидеть, как Get-Process
с -ComputerName
параметр потерпит неудачу. С PowerShell Remoting (через WinRM) все, что вам нужно сделать, это открыть TCP 5985 (HTTP) и TCP 5986 (HTTPS, необязательно).
Я сам столкнулся с этой ошибкой сегодня, решение в моем случае (я уже включил порт 5985), проблема возникла из-за заблокированного брандмауэром порта 445 (на цели).
Как только этот порт был включен, я смог использовать,
Get-Process -ComputerName dc01
а также
Get-Service -ComputerName dc01
Однако я рекомендую вам прочитать эту страницу: https://www.grc.com/port_445.htm как может показаться, что при подключении этого порта к Интернету могут возникнуть некоторые проблемы с безопасностью.
Мои симптомы были в точности как описание ОП...