如何计算小于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文件。所以它应该只写组合其中有一个或多个成员。该解决方案还应该提高性能。如果有多个可能的话,请提出所有可能的方法。
答
您可以使用.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 –
'... | Export-Csv ...' - >'... | ? {$ _。Members} | Export-Csv ...' –
谢谢Ansgar,但这不起作用。 –
我怀疑这一点。请提供证据。 –