在 Powershell 中,如何将 CredSSP DelegateComputers 列为不同的对象?

在 Powershell 中,如何将 CredSSP DelegateComputers 列为不同的对象?

众所周知,为了避免Powershell 第二跳问题当使用 Powershell Remoting 时,需要设置 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 连接到“客户端”服务器并从那里访问“服务器”服务器上的资源。一切都很好。

然而,环境很大,我想知道“客户端委托计算机”在大量机器上的效果.我该如何实现这个目标?

我知道我可以(Get-WSManCredSSP)[0]获取客户端 DelegateComputers 列表。但这显示为一个丑陋、笨拙的字符串,我会非常不喜欢解析,因为这是 Powershell 并且我喜欢面向对象的方法。

我认为我已经wsman:/使用Get-Item和到处搜索过Get-​WS​Man​Instance,并且用 Google 搜索过所有 Google 内容。

这似乎令人难以想象,这太难以捉摸了,我一定是错过了一些令人尴尬的简单的事情。

因此 ServerFault,如何通过本机 Powershell 或直接使用 .NET 调用获得一个呈现良好的 CredSSP Client DelegateComputers 数组或类似数组在给定的主机上?

我可以运行 Win2008r2 和 Win2012r2 上可用的任何版本的 .NET Framework 和 Powershell。

答案1

事实证明,谷歌实际上多了一个页面,答案就在这里

客户端 DelegateComputer 列表存储在 Windows 注册表中的以下位置:

HKLM:\software\policies\microsoft\windows\CredentialsDelegation\AllowFreshCredentials

阅读这个关键并不好看,但比其他选择要好。

因此,Victor Vogelpoel,这位享有世间一切荣耀的人,想出了以下妙语:

((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 { $_ } })

相关内容