我使用 PowerView 枚举活动目录,并且我有这个集合,SecurityIdentifiers
我想使用 PowerView 函数将其转换为可读名称Convert-SidToName
。我希望 Powershell 能够以某种方式将这些值传递给函数,但不知道如何操作:
PS C:\Users\Administrator\Desktop> Get-ObjectAcl -Identity "DnsAdmins" | ? {$_.ActiveDirectoryRights -eq "GenericAll" } | select SecurityIdentifier
SecurityIdentifier
------------------
S-1-5-21-976142013-3766213998-138799841-512
S-1-5-32-548
S-1-5-18
S-1-5-21-976142013-3766213998-138799841-519
就像是:
PS C:\Users\Administrator\Desktop> Get-ObjectAcl -Identity "DnsAdmins" | ? {$_.ActiveDirectoryRights -eq "GenericAll" } | select SecurityIdentifier | Convert-SidToName
只是给出了语法错误:
ConvertFrom-SID : Cannot validate argument on parameter 'ObjectSid'. The argument
"@{SecurityIdentifier=S-1-5-21-976142013-3766213998-138799841-519}" does not match the "^S-1-.*" pattern. Supply an
argument that matches "^S-1-.*" and try the command again.
答案1
将其替换select SecurityIdentifier
为select -ExpandProperty SecurityIdentifier
将 SID 值作为字符串列表而不是对象进行管道传输。
根据是否ConvertFrom-SID
接受字符串列表,您可能还需要用 foreach 替换基本管道| foreach { ConvertFrom-SID $_ }
。
Get-Acl
另外,您可能更喜欢使用路径的内置命令ad:
,它会在可能的情况下自动将 SID 转换为 ID:
(Get-Acl -Path "ad:$((Get-ADGroup "DNSAdmins").DistinguishedName)").Access |
? {$_.ActiveDirectoryRights -eq "GenericAll" } |
select -Expand IdentityReference | sort
# result:
Value
-----------------
CONTOSO\Domain Admins
CONTOSO\Enterprise Admins
CONTOSO\Enterprise Key Admins
etc...