Windows 用于列出组成员的 PowerShell 命令 - 微调

Windows PowerShell Command To List Group Members - Fine-Tuning

我制作了下面列出组成员的命令:

gwmi win32_group -filter 'Name="Administrators"'|%{$_.GetRelated('Win32_UserAccount')} | select Name

上面的命令有效,但是需要很长时间才能完成,有没有办法微调上面的命令以使其运行得更快?

请注意,我仅限于 PowerShell 2.0。

编辑: 似乎上面的命令也在查询所有 DC 帐户。如何只查询本地用户?

调整

管道中较慢的部分是 .GetRelated() 的调用,因为这将评估 WMI class 实例的关联,这可能是巨大的列表。所以你必须小心并尽可能地过滤。你可以这样做:

(Get-WmiObject -Class Win32_Group -Filter "LocalAccount = TRUE and SID = 'S-1-5-32-544'").GetRelated("Win32_Account", "Win32_GroupUser", "", "", "PartComponent", "GroupComponent", $false, $null) | Select-Object -Property Name

请注意,我使用 Administrators 组的众所周知的 SID 来查找它,因为它的名称在其他语言中可能有所不同。我还查询 Win32_Account 而不是 Win32_UserAccount 以真正 return Administrators 组的所有成员,其中可能包括其他组而不仅仅是用户帐户。当然,您可以根据需要更改此设置。您可以在 this article.

中阅读有关此调整的更多信息

不同的方法

  1. 另一种方法是在一个 WMI 查询中定义所有内容:

    Get-WmiObject -Query "ASSOCIATORS OF {Win32_Group.Domain='$env:COMPUTERNAME',Name='Administrators'} WHERE AssocClass=Win32_GroupUser ResultRole=PartComponent" | Select-Object -Property Name
    
  2. 此外,您可以使用net工具查询Administrators组的成员:

    net localgroup Administrators
    

    缺点:您必须解析文本输出。