如何计算小于1的变量存储值和过滤器

问题描述:

我试图从我提供的每个服务器中提取组成员计数。下面的脚本适用于:如何计算小于1的变量存储值和过滤器

$computers = gc D:\Samir-PS\serverlist.txt 
$computers | foreach { 
    $computername = $_ 
    [ADSI]$S = "WinNT://$($env:computername)" 
    $S.children.where({$_.class -eq 'group'}) | 
     Select @{Name="Name";Expression={$_.name.value}}, 
      @{Name="Members";Expression={ 
       [ADSI]$group = "$($_.Parent)/$($_.Name),group" 
       $members = $Group.psbase.Invoke("Members") 
       ($members | ForEach-Object { 
        $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) 
       }) -join ";" 
      }} 
} | Export-Csv -Path d:\samir-ps\audit.csv 

但是,我想在生成输出时进行优化。如果该组中没有任何成员,则不应写入CSV文件。所以它应该只写组合其中有一个或多个成员。该解决方案还应该提高性能。如果有多个可能的话,请提出所有可能的方法。

+2

'... | Export-Csv ...' - >'... | ? {$ _。Members} | Export-Csv ...' –

+0

谢谢Ansgar,但这不起作用。 –

+0

我怀疑这一点。请提供证据。 –

您可以使用.count来验证和循环。在你的代码 试试这个: IF(($ members.count)-gt 0)

下面

$computers = gc D:\Samir-PS\serverlist.txt 
$computers | foreach { 
    $computername = $_ 
    [ADSI]$S = "WinNT://$($env:computername)" 
    $S.children.where({$_.class -eq 'group'}) | 
     Select @{Name="Name";Expression={$_.name.value}}, 
      @{Name="Members";Expression={ 
       [ADSI]$group = "$($_.Parent)/$($_.Name),group" 
       $members = $Group.psbase.Invoke("Members") 
       if(($members.count) -gt 0) 
       { 
       ($members | ForEach-Object { 
        $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) 
       }) -join ";" 
       } 
      }} 
} | Export-Csv -Path d:\samir-ps\audit.csv 
+0

是的,这对我有用。谢谢Rakesh –