Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于列出组成员的Windows PowerShell命令-微调_Windows_Powershell_Wmi_Powershell 2.0_Get Wmiobject - Fatal编程技术网

用于列出组成员的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组的所有成员,其中可能包括其他组,而不仅仅是用户帐户。当然,您可以根据您的需要进行更改。您可以阅读有关此调整的更多信息

不同的方法
  • 另一种方法是在一个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组的成员:

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


  • 如果您加入了域,那么您的查询将尝试查询域用户和组,以及
    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