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 как может показаться, что при подключении этого порта к Интернету могут возникнуть некоторые проблемы с безопасностью.

Мои симптомы были в точности как описание ОП...

Другие вопросы по тегам