Есть ли простой способ проверить, включен ли CredSSP в системах?
Я знаю о Get-WSManCredSSP
функция; Однако этот командлет не работает хорошо в сценарии. Это возвращает длинную строку, похожую на следующую:
The machine is configured to allow delegating fresh credentials to the following target(s): wsman/*,wsman/*,wsman/*,wsman/*
This computer is configured to receive credentials from a remote client computer.
Я не могу легко включить это в сценарий, который я пишу, поэтому я ищу альтернативный способ проверки CredSSP.
3 ответа
Не можете ли вы рассмотреть возможность использования этого, как описано в справке CmdLet: Получает параметр WS-Management CredSSP на клиенте (<localhost|computername>\Client\Auth\CredSSP
).
На локальной машине это дает:
(Get-Item WSMan:\localhost\Client\Auth\CredSSP).value
Вы можете использовать это так:
(Get-Item WSMan:\localhost\Client\Auth\CredSSP).value -eq $false
Вы можете сначала проверить, доступен ли WinRm:
(Get-Service -Name winrm ).Status
Я также боролся с ограничениями Get-WSManCredSSP
и нашел этот вспомогательный сценарий Виктора Фогельпоэля / Равиканта Чаганти очень полезным.
Некоторые примеры:
Проверьте, был ли текущий компьютер настроен как сервер CredSSP и / или клиент:
(Get-WSManCredSSPConfiguration).IsServer
(Get-WSManCredSSPConfiguration).IsClient
Проверьте, был ли указанный клиентский компьютер настроен для делегирования:
Get-WSManCredSSPConfiguration | % { $_.ClientDelegateComputer.Contains('clientcomputername') }
(не предназначенный в качестве замены для работы Vogelpoel & Chaganti, но в качестве краткого изложения быстрого прочтения CredSSP.cs, так что вы можете быстро понять, что он делает - при этом он был протестирован на нескольких был под рукой и вроде работает)
function Get-WSManCredSSPState
{
$res = [pscustomobject]@{DelegateTo = @(); ReceiveFromRemote = $false}
$wsmTypes = [ordered]@{}
(gcm Get-WSManCredSSP).ImplementingType.Assembly.ExportedTypes `
| %{$wsmTypes[$_.Name] = $_}
$wmc = new-object $wsmTypes.WSManClass.FullName
$wms = $wsmTypes.IWSManEx.GetMethod('CreateSession').Invoke($wmc, @($null,0,$null))
$cli = $wsmTypes.IWSManSession.GetMethod('Get').Invoke($wms, @("winrm/config/client/auth", 0))
$res.ReceiveFromRemote = [bool]([xml]$cli).Auth.CredSSP
$afcPath = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentials'
if (test-path $afcPath)
{
$afc = gi $afcPath
$res.DelegateTo = $afc.GetValueNames() | sls '^\d+$' | %{$afc.GetValue($_)}
}
return $res
}