是否有等效的方法可以在不运行 AD 搜索的情况下获取计算机的 AD 组成员身份?我需要能够检索 AD 中计算机组成员资格的组 SID,即使计算机没有连接到域控制器,以标准用户帐户运行。
本质上是寻找与此等效的内容,除了当前的计算机帐户。
$groups = [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups
我通过逆向工程弄清楚了如何做到这一点
gpresult
。为此,首先作为管理员,我授予标准用户对 WMI
命名空间 root\rsop\COMPUTER
的访问权限
我更喜欢一个不必这样做的解决方案,但需要进一步调查。
使用脚本一次性设置机器Set-WmiNamespaceSecurity.ps1
Set-WmiNamespaceSecurity.ps1 root/rsop/COMPUTER add Users Enable
现在,我可以作为标准用户从计算机所在的计算机中检索 Active Directory 计算机组
SIDs
,即使它未使用以下 PowerShell 连接到网络:
(Get-WmiObject -Namespace "root\rsop\COMPUTER" -Class RSOP_Session -Property SecurityGroups).SecurityGroups
我喜欢这个答案:离线时非常有用。我对此进行了一些扩展,以便在连接到域时将其转换为组名称(下面的脚本代码)。这在测试域计算机的组成员身份更改时非常有用(我在测试和验证 gMSA 时遇到了这种需要)。
# Get-ComputerGroupMembership.ps1
#requires -version 3
#requires -RunAsAdministrator
Get-WmiObject "RSOP_Session" -Namespace "ROOT\rsop\computer" -Property "SecurityGroups" | Select-Object -ExpandProperty SecurityGroups | ForEach-Object {
$SID = $_
try {
([Security.Principal.SecurityIdentifier] $SID).Translate([Security.Principal.NTAccount]).Value
}
catch {
$SID
}
}