我有一个Powershell脚本,可以找到对当前计算机具有管理员访问权限的所有用户(域和本地用户)。该脚本可以正常工作,直到您更改计算机的语言。我想知道是否还有其他方法可以解决此问题。下面是我当前的脚本
$strComputer = "."
$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$Group = $computer.psbase.children.find("Administrators")
$Props = $Group.psbase.invoke("Members") | %{$_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)}
如果您执行Write-Host $ Props,则可以获取格式为{DOMAIN} / {USERNAME}的所有用户的输出
谢谢!
答案 0 :(得分:2)
您可以使用组的well-known SID进行查找。 blog post here中有一些讨论,但是使用了VBScript和WMI(winmgmts:\\
)。
如果您想像以前一样使用WinNT://
,那么它将在本地组中搜索具有SID S-1-5-32-544
的组,该ID与Administrators
组相对应。 / p>
$strComputer = "."
$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$Group = $computer.Children |
Where {
(New-Object System.Security.Principal.SecurityIdentifier $_.objectSid.Value,0).ToString()
-eq "S-1-5-32-544"
} | Select -First 1
该New-Object
位是因为objectSid
属性以字节数组的形式出现,因此您需要使用它创建一个SecurityPrincipal
对象,才能将其转换为字符串。做比较。