用于列出组成员的Windows PowerShell命令-微调
我精心编制了以下命令,其中列出了组的成员:用于列出组成员的Windows PowerShell命令-微调,windows,powershell,wmi,powershell-2.0,get-wmiobject,Windows,Powershell,Wmi,Powershell 2.0,Get Wmiobject,我精心编制了以下命令,其中列出了组的成员: gwmi win32_group -filter 'Name="Administrators"'|%{$_.GetRelated('Win32_UserAccount')} | select Name 上面的命令可以运行,但是需要很长时间才能完成。有没有办法对上面的命令进行微调,使其运行得更快 请注意,我仅限于PowerShell 2.0 编辑: 上面的命令似乎也在查询所有DC帐户。如何仅查询本地用户?Tuning 管道中缓慢的部
gwmi win32_group -filter 'Name="Administrators"'|%{$_.GetRelated('Win32_UserAccount')} | select Name
上面的命令可以运行,但是需要很长时间才能完成。有没有办法对上面的命令进行微调,使其运行得更快
请注意,我仅限于PowerShell 2.0
编辑:
上面的命令似乎也在查询所有DC帐户。如何仅查询本地用户?Tuning
管道中缓慢的部分是调用,因为这将评估WMI类实例的关联,这些实例可能是巨大的列表。所以你必须小心,尽可能多地过滤。您可以这样做:
(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
,以真正返回Administrators组的所有成员,其中可能包括其他组,而不仅仅是用户帐户。当然,您可以根据您的需要进行更改。您可以阅读有关此调整的更多信息
不同的方法
Get-WmiObject -Query "ASSOCIATORS OF {Win32_Group.Domain='$env:COMPUTERNAME',Name='Administrators'} WHERE AssocClass=Win32_GroupUser ResultRole=PartComponent" | Select-Object -Property Name
net
工具查询Administrators组的成员:
缺点:您必须解析文本输出
如果您加入了域,那么您的查询将尝试查询域用户和组,以及
GetRelated()
方法。这是一个臭名昭著的性能瓶颈。您可以尝试使用Get WmiObject-ClassName Win32_Group-filter“Name='Administrators'和Domain='$env:computername'”
将其筛选到本地帐户,但我认为GetRelated()
也会这样做。我不记得$env:computername
是否在PSv2上工作,但它只是主机名。您是对的,该命令还查询域用户!我已尝试测试您仅查询本地用户的建议,但是,我没有成功,该命令似乎只列出组名,而没有列出其用户成员,我是否做错了什么?获取WmiObject-ClassName Win32_Group-Filter“Name='Administrators'和Domain='$env:computername'”|选择名称
net localgroup Administrators