Я пытаюсь реализовать удаленное взаимодействие PowerShell (для выполнения сценариев PowerShell на удаленном сервере).
Мой удаленный сервер работает под управлением Windows Server 2008 и PowerShell v2.
На консоли PS с повышенными правами я выполнил следующий командлет:
Enable-PSRemoting
Возвращено на консоль:
WinRM уже настроен для приема запросов на этом компьютере.
WinRM уже настроен для удаленного управления на этом компьютере.
Из сеанса PowerShell с повышенными привилегиями на клиентском компьютере я выполнил следующий командлет:
Enter-PSSession –ComputerName [remote_server_name]
На этот раз вернулся к консоли:
Enter-PSSession: не удалось подключиться к удаленному серверу [имя_удаленного_сервера] со следующим сообщением об ошибке:
Клиент не может подключиться к месту назначения, указанному в запросе. Убедитесь, что служба в месте назначения работает и принимает запросы. Обратитесь к журналам и документации для службы WS-Management, работающей в месте назначения, чаще всего IIS или WinRM. Если местом назначения является служба WinRM, выполните следующую команду в месте назначения для анализа и настройки службы WinRM: «winrm quickconfig». Для получения дополнительной информации см. Раздел справки about_Remote_Trou Troubleshooting.
В строке: 1 символ: 1
+ Enter_PSSession –ComputerName [имя_удаленного_сервера]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: Неверный / аргумент: ([имя_удаленного_сервера]: строка) [Enter-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId: CreateRemoteRunspaceFailed
Я выполнил «winrm quickconfig» в соответствии с предложением сообщения об ошибке. Еще раз вернемся к консоли:
WinRM уже настроен для приема запросов на этом компьютере.
WinRM уже настроен для удаленного управления на этом компьютере.
1041 * Повтор *
Enter-PSSession –ComputerName [remote_server_name]
с клиентского компьютера возвращает ту же ошибку.
Я дважды проверил, что служба WinRM работает на удаленном сервере.
Правило брандмауэра удаленного управления Windows (HTTP-In) настроено для протокола TCP, локального порта 5985 и всех удаленных портов.
Даже когда я выполняю
Get-Service WinRM –ComputerName [remote_server_name]
с клиентского компьютера мы видим, что вернулись в консоль, подтверждая, что служба WinRM действительно работает на удаленном сервере:
Имя статуса DisplayName
------ ---- -----------
Запуск WinRM Windows Remote Management (WS-Manag…
Выполнение следующей команды на удаленном компьютере
WinRM Enumerate WinRM/Config/Listener
возвращается в консоль, показывая, что правильный порт открыт:
Слушатель [Source = ”GPO”]
Адрес = *
Порт = 5985
Имя хоста включено = true
URLPrefix = wsman
CertificateThumbprint ListeningOn = null
Но, исполнение
$remoteServer = [test_server_name]
$port = 5985
$connection = New-Object System.Net.Sockets.TcpClient($remoteServer, $port)
if ($connection.Connected) {
Write-Host "Success"
}
else {
Write-Host "Failed"
}
возвращает следующее сообщение об ошибке:
New-Object: Исключение вызывает ".ctor" с аргументом (ами) "2": "Невозможно установить соединение, поскольку целевая машина активно отказала ему в этом [remote_server_ipaddress]: 5985"
В строке: 4 символа: 15
+ ... onnection = New-Object System.Net.Sockets.TcpClient ($ ipaddress, $ port ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId: ConstructorInvokedThrowException, Microsoft.PowerShell.Commands.NewObjectCommand
у меня есть другоеЭто удаленный сервер, работающий под управлением Windows Server 2012 R2 с PowerShell v4. Я включил PS Remoting на этом поле без проблем и могу удаленно выполнять сценарии PS с того же клиента.
Итак, что мне не хватает? Есть ли вероятность того, что существует проблема совместимости между версиями PowerShell?
Мой клиентский ПК работает под управлением PowerShell 5, мой правильно работающий удаленный сервер работает под управлением PowerShell 4, мой неисправный удаленный сервер работает под управлением PowerShell 2.
Выводы, рекомендации, советы очень приветствуются. Спасибо за поиск.
UPDATE:
С тех пор я обновил .Net Framework на тестовых виртуальных машинах до .Net 4.7.2 и установил PowerShell 4 на уязвимую виртуальную машину (так же, как и правильно работающий блок).
При сравнении записей реестра, связанных с WinRM, между моей рабочей виртуальной машиной и уязвимой машиной я нашел ключ:
1114 * *
HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ WSMAN \ Service
На работающей виртуальной машине я обнаружил 32-битный «allow-remote-запросы», которому присвоено значение 1. Эта запись отсутствовала в реестре уязвимой машины. Я добавил его, перезагрузил компьютер, повторил запрос на подключение.
Тем не менее, та же проблема сохраняется.