Назад | Перейти на главную страницу

Как в Powershell указать CredSSP DelegateComputers как отдельные объекты?

Как известно, чтобы избежать Проблема 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-​WS​Man​Instance, а также погуглил через то, что разумно должно быть всем гуглом.

Кажется немыслимым, что это так неуловимо, я, должно быть, пропустил что-то досадно простое.

Итак, 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 { $_ } })