Как известно, чтобы избежать Проблема Powershell Second Hop при удаленном взаимодействии с Powershell необходимо настроить параметры клиента и сервера CredSSP.
например
# On the client, a.k.a the First Hop Server
Enable-WSManCredSSP -Role "Client" -DelegateComputer "secondhop.example.com"
# On the server, a.k.a the Second Hop Server
Enable-WSManCredSSP -Role "Server"
И теперь я могу PSRemote на «клиентский» сервер и оттуда получать доступ к ресурсам на «серверном» сервере. Все хорошо и хорошо.
Однако среда большая, и Я хочу знать, что "Client DelegateComputers" работает на большом количестве машин.. Как мне этого добиться?
я знаю что могу (Get-WSManCredSSP)[0]
чтобы получить список клиентских компьютеров-делегатов. Но это представлено как уродливая, громоздкая строка, которую я бы очень хотелось бы не разбирать, учитывая, что это Powershell и что мне нравится объектно-ориентированный подход.
Я хотел бы думать, что я все кончил wsman:/
оба используют Get-Item
и Get-WSManInstance
, а также погуглил через то, что разумно должно быть всем гуглом.
Кажется немыслимым, что это так неуловимо, я, должно быть, пропустил что-то досадно простое.
Итак, ServerFault, как мне Powershell изначально или с помощью прямого вызова .NET получить красиво представленный массив или аналогичный CredSSP Client DelegateComputers на данном хосте?
Я могу запустить любую версию .NET Framework и Powershell, доступную на Win2008r2 и Win2012r2.
Как оказалось, у Google на самом деле была еще одна страница и вот где скрывался ответ.
Список Client DelegateComputer хранится в реестре Windows по адресу:
HKLM:\software\policies\microsoft\windows\CredentialsDelegation\AllowFreshCredentials
Читать этот ключ некрасиво, но лучше, чем альтернатива.
Итак, Виктор Фогельпол, вся слава ему мирская, придумал следующую строчку:
((Get-ItemProperty HKLM:\software\policies\microsoft\windows\CredentialsDelegation\AllowFreshCredentials).psobject.Properties | where { $_.Name -match "\d+" } | select -expand value | foreach { if ($_ -like "wsman/*") { $_.substring(6) } else { $_ } })