独立于语言的方法,可通过Powershell查找对计算机具有管理员访问权限的所有用户

时间:2018-12-13 15:20:55

标签: powershell active-directory

我有一个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}的所有用户的输出

谢谢!

1 个答案:

答案 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对象,才能将其转换为字符串。做比较。