Powershell ADSI:我可以使用 SID 查询本地管理员组吗?

问题描述 投票:0回答:3

我处于多语言客户端环境中。本地管理员有“Administratoren”、“Administrators”、“Administradores”、“Administrateurs”等。 这可以使用 Invoke-Expression 获取组成员:

PS C:\> Get-LocalGroupMember -SID "S-1-5-32-544"

ObjectClass Name                 PrincipalSource
----------- ----                 ---------------
Benutzer    PC-JOU\Administrator Local          
Benutzer    PC-JOU\Jou           Local

使用正常组名称的工作示例,例如在德国客户端上,无需 Invoke-*:

PS C:\> $ADSI = [ADSI]"WinNT://IP-of-computer/Administratoren"
PS C:\> $ADSI.Invoke("Members") | foreach {$_.GetType().InvokeMember("ADsPath", 'GetProperty', $null, $_, $null)}
WinNT://PC-JOU/Administrator
WinNT://PC-JOU/Jou

但是我无法让它与 SID 一起使用以实现国际化:

PS C:\> $ADSI = [ADSI]"WinNT://IP-of-computer/S-1-5-32-544"
PS C:\> $ADSI.Invoke("Members") | foreach {$_.GetType().InvokeMember("ADsPath", 'GetProperty', $null, $_, $null)}
Ausnahme beim Abrufen des Elements "Invoke": "Der Gruppenname konnte nicht gefunden werden."
In Zeile:1 Zeichen:1
+ $ADSI.Invoke("Members") | foreach {$_.GetType().InvokeMember("ADsPath ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], ExtendedTypeSystemException
    + FullyQualifiedErrorId : CatchFromBaseGetMember

到目前为止我已经看到了 sid 的属性值:

PS C:\> $ADSI.objectSid
1
2
0
0
0
0
0
5
32
0
0
0
32
2
0
0

PS C:\> $ADSI.objectSid.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                          
-------- -------- ----                                     --------                                                                                                                                          
True     False    PropertyValueCollection                  System.Collections.CollectionBase                                                                                                                 

知道如何使用 [ADSI] 和本地管理员的 SID 值来使其工作吗?使用 Invoke-Expression 方法可以节省我的时间。

powershell adsi sid group
3个回答
1
投票

先通过 SID 查找组名怎么样?

$AdminGroupSid = 'S-1-5-32-544'
$AdminGroup = New-Object System.Security.Principal.SecurityIdentifier($AdminGroupSid)
$AdminGroupName = $AdminGroup.Translate([System.Security.Principal.NTAccount]).Value -replace '.+\\'

现在只需处理您的正常代码即可

$ADSI = [ADSI]"WinNT://IP-of-computer/$AdminGroupName"
$ADSI.Invoke("Members") | ForEach-Object {
    $_.GetType().InvokeMember("ADsPath", 'GetProperty', $null, $_, $null)
}

1
投票

已解决:根据 Santiago Squarzon 的评论,我可以使用 WMI 获取实际的本地管理员组名称。有了正确的组名,其他一切就都解决了。

工作示例:我从英语域控制器查询,从德语远程计算机获取本地“Administratoren”:

$RemoteAdminGroupName = (Get-WmiObject Win32_Group -Computername 192.168.33.57 -Filter "SID='S-1-5-32-544'").Name
"local admin group on remote machine: $RemoteAdminGroupName"
$ADSI = [ADSI]"WinNT://192.168.33.57/$RemoteAdminGroupName"
$ADSI.Invoke("Members") | foreach {$_.GetType().InvokeMember("ADsPath", 'GetProperty', $null, $_, $null)}

结果:

local admin group on remote machine: Administratoren
WinNT://S2016-DE-TEST/Administrator
WinNT://PKI-TEST/Domain Admins

enter image description here


0
投票

我自 2023 年 5 月以来一直在使用此版本,但从未有时间发布此改进版本。单独的答案,因为它不依赖于 WMI,它使用纯 ADSI,并且如果目标系统是从 Windows 2000 到 Windows 11 / Server 2025,则可以工作。它可以在德语、英语、法语和西班牙语目标系统上工作(经过测试),这些系统都“管理员”用户和“管理员”组具有不同的名称。您不必使用完整的域名,较短的 netbios 名称也可以,但在许多环境中,完整名称更快。

$LocalIdentities = ([ADSI]"WinNT://Targetmachine.domain.local").Children.Where({$_.Path -like "WinNT://*/*/*"}) | 
    Select-Object @{Name="Name";Expression={$_.Name[0]}},
        SchemaClassName,
        objectSid,
        @{Name="SID";Expression={[System.Security.Principal.SecurityIdentifier]::new($_.ObjectSid.value, 0).Value}}
$LocalAdmin = $LocalIdentities.Where({$_.SID -like "S-1-5-21-*-*-*-500"}).Name
$LocalAdminGroup = $LocalIdentities.Where({$_.SID -eq "S-1-5-32-544"}).Name
$LocalMachineSid = $LocalIdentities.Where({$_.SID -like "S-1-5-21-*-*-*-500"}).SID.Replace("-500","")

例如在德国目标系统中,这将为您提供:

PS C:\> "$LocalAdmin`n$LocalAdminGroup`n$LocalMachineSid"
Administrator
Administratoren
S-1-5-21-628914358-228923571-32354782202
© www.soinside.com 2019 - 2024. All rights reserved.