Боролся с этим уже пару дней.
Я получаю следующую ошибку:
PS C:\> get-process -ComputerName Win2012r2
get-process : Couldn't connect to remote machine.
At line:1 char:1
+ get-process -ComputerName 10.10.1.54
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-Process], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetProcessCommand
Я подтвердил, что на сервере работает служба удаленного реестра (я также пытался ее перезапустить).
Кроме того, я создал настраиваемое правило брандмауэра, разрешающее RCP-соединения на портах 5985 и 5986 на https://stackoverflow.com/questions/22357063/get-process-to-remote-computer-doesnt-work-but-invoke-command-does
Я также дважды проверил имена пользователей на Powershell Get-Process не может подключиться к удаленному компьютеру
Заметка
invoke-command -ComputerName Win2012r2 -ScriptBlock {Get-Process}
работает нормально, но мне действительно нужно получить get-process -computername
процесс работает напрямую, поскольку он не работает внутри другого скрипта, который используется другими
У меня была аналогичная ошибка, когда я начал учить себя PS2 на клиенте Win7, тестируя LocalHost. Я решил это, запустив службу удаленного реестра.
В конце концов я сдался и написал новый сценарий, в котором вместо вызова Get-Process
напрямую:
invoke-command -ComputerName Win2012r2 -ScriptBlock {param($procName) Get-Process -Name $processName} -ArgumentList $ProcName
-ComputerName
в Get-Process
использует RPC, а не WinRM. WinRM - это то, что использует 5985 и 5986, а не RPC.
Порты RPC по умолчанию являются динамическими.
Проверьте "Get-Help" в Get-Process
.
-ComputerName
Этот параметр не зависит от удаленного взаимодействия Windows PowerShell. Вы можете использовать параметр ComputerName в Get-Process
даже если ваш компьютер не настроен для выполнения удаленных команд.
Invoke-Command
ИСПОЛЬЗУЕТ WinRM. Итак, когда вы изменили свой код на использование Invoke-Command, ваш скрипт начал работать.
Попробуйте использовать вместо этого:
get-wmiobject -class win32_process -computername pcname -filter "Name = 'procname'"
Единственное, о чем я могу думать, это то, что либо учетная запись, под которой вы ее запускаете, не имеет прав администратора на целевой машине (Win2012r2), либо ее блокирует брандмауэр. Попробуйте полностью отключить брандмауэр, чтобы проверить последнее.
Вы проверили, что ваше разрешение DNS работает? Можно попробовать nslookup, чтобы убедиться, что вы разрешаете правильный IP-адрес.
Прочтите этот пост. Это похоже на ответ на вашу проблему. Попробуйте отключить брандмауэр на обеих системах и использовать get-process. Если это сработает, вы будете знать, что вам нужно открыть порты, упомянутые в этом сообщении.