我正在尝试从我提供的每个服务器中提取组成员资格计数。下面的脚本适用于此:
$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文件。所以它应该只编写有一个或多个成员的组。解决方案还应该改善性能。如果有多个方法,请建议所有可能的方法。
答案 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