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.
中阅读有关此调整的更多信息
不同的方法
另一种方法是在一个 WMI 查询中定义所有内容:
Get-WmiObject -Query "ASSOCIATORS OF {Win32_Group.Domain='$env:COMPUTERNAME',Name='Administrators'} WHERE AssocClass=Win32_GroupUser ResultRole=PartComponent" | Select-Object -Property Name
此外,您可以使用net
工具查询Administrators组的成员:
net localgroup Administrators
缺点:您必须解析文本输出。
我制作了下面列出组成员的命令:
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.
不同的方法
另一种方法是在一个 WMI 查询中定义所有内容:
Get-WmiObject -Query "ASSOCIATORS OF {Win32_Group.Domain='$env:COMPUTERNAME',Name='Administrators'} WHERE AssocClass=Win32_GroupUser ResultRole=PartComponent" | Select-Object -Property Name
此外,您可以使用
net
工具查询Administrators组的成员:net localgroup Administrators
缺点:您必须解析文本输出。