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

时间:2017-07-24 17:09:13

标签: powershell powershell-v4.0 powershell-remoting

我正在尝试从我提供的每个服务器中提取组成员资格计数。下面的脚本适用于此:

$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文件。所以它应该只编写有一个或多个成员的组。解决方案还应该改善性能。如果有多个方法,请建议所有可能的方法。

1 个答案:

答案 0 :(得分:1)

您可以使用.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