用于列出服务器的用户、组、权限等的 PowerShell 脚本

tea*_*144 3 powershell

我正在寻找一个 PowerShell 脚本,它将查询和输出给定 Windows 服务器上的所有本地和 AD 用户、服务帐户和组。我需要脚本递归地列出在该服务器上具有特权的每个组的成员。我正在寻找一个脚本,它会给我一个很好的起点,我可以根据自己的特定需求对其进行定制。谢谢。

Pat*_*ick 5

午休时我很无聊,所以我给你做了这个。

$strLocalMachine = $env:computername

$arrLocalGroups = Get-CimInstance -ClassName Win32_Group -filter "Domain = '$strLocalMachine'"
$arrDomainGroups = Get-CimInstance -ClassName Win32_Group -filter "Domain = '[YOUR DOMAIN NAME HERE]'"

ECHO ""
ECHO "Local Groups"
ECHO ""

foreach($objLocalGroup in $arrLocalGroups)
{
$groupname = $objLocalGroup.Name

$group = [ADSI]"WinNT://./$groupname"
ECHO "-----$($objLocalGroup.caption)-----"
@($group.Invoke("Members")) | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
}


ECHO ""
ECHO "Domain Groups"
ECHO ""


foreach($objDomainGroup in $arrDomainGroups)
{
$groupname = $objDomainGroup.name

$groupmembers = Get-QADGroupMember $groupname
ECHO "-----$groupname-----"
foreach($entry in $groupmembers)
    {
    IF($entry.type -eq 'group')
        {
        Echo "$($entry.name)`n    GROUP MEMBERS"
        $subgroupmembers = Get-QADGroupMember $($entry.name)
        foreach($member in $subgroupmembers){ECHO "    $($member.name)"}
        }
    else{echo "$($entry.name)"}
    $entry = $null
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 这依赖于免费的 Quest AD commandlet来枚举域组成员身份。如果您已安装 RSAT 或在 DC 上运行它,您可以修改它以对 Microsoft AD cmdlet 执行相同操作。

  2. 我还没有在多台机器上测试过这个,所以不能保证它在我的测试 Win 7 盒子之外的工作效果如何,但只要您以域管理员身份运行,这应该没问题。

  3. 我觉得域组输出对于我的域成员 PC 来说太高了。该命令Get-CimInstance -ClassName Win32_Group -filter "Domain = '[YOUR DOMAIN NAME HERE]'"返回的结果远远超过我的预期,所以 YMMV,但如果它们是正确的组,那么它应该逐步通过并列出给你成员船。

  4. 恐怕我不知道如何确定本地组的成员是用户还是组。行 :@($group.Invoke("Members")) | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}应该允许我们调用 name 以外的成员,但我无法让它工作。如果有人可以为您澄清这一点,您应该能够使用它来列出本地组的成员。

希望这可以帮助。