代码之家  ›  专栏  ›  技术社区  ›  Kaizer69

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

  •  0
  • Kaizer69  · 技术社区  · 6 年前

    我有一个powershell脚本,可以找到对当前计算机具有管理员访问权限的所有用户,包括域和本地用户。脚本运行良好,直到您更改计算机的语言。我想知道是否还有其他办法可以解决这个问题。下面是我当前的脚本

    $strComputer = "."
        $computer = [ADSI]("WinNT://" + $strComputer + ",computer")
        $Group = $computer.psbase.children.find("Administrators")
        $Props = $Group.psbase.invoke("Members")  | %{$_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)}
    

    如果您不编写主机$props,则可以获得格式化为{domain}/{username}的所有用户的输出。

    提前谢谢!

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gabriel Luci    6 年前

    你可以使用 well-known SID 去寻找它。有一些讨论 blog post here ,但它使用vbscript和wmi( winmgmts:\\ )

    如果你想用 WinNT:// 就像您已经是,那么这将在本地组中搜索具有sid的组 S-1-5-32-544 ,它对应于 Administrators 组。

    $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 对象,以便能够将其转换为字符串进行比较。