'因为我的无知......
我使用@($var).Count
,因此即使$var
包含1个“项目”,我也可以获得计数。
当我的搜索没有返回时,为什么我的数组包含一个项目?
即。
PS C:\Windows\system32> $Groups = $null
Import-Module -Name "activedirectory"
$search = "aaaarggg"
$searchPat = `"*"` + $search + `"*"`
$Groups = Get-ADGroup -Filter {(name -like $searchPat)}
if ($Groups -eq $null) {
"No matches"
@($Groups).Count
}
else {
"Matches"
@($Groups).Count
}
No matches
1
答案 0 :(得分:2)
正如Lee所说,你创建了包含一个项目的数组,该项目为null。这可能看起来不合逻辑,但是这样做是为了在减少或增加数组中的项目数量时为您提供一致的结果。看下面的例子。如果@($null).count
返回0
,您将从2
跳转到0
。
@($null,$null,$null).Count #output 3
@($null,$null).Count #output 2
@($null).Count #output 1
@().Count #output 0
在$null
运算符中输入@()
值也会导致无法处理此类情况:
$("a",$null,"c").count #output 3
$("a","b","c").count #output 3
答案 1 :(得分:0)
来自Powershell doc
您创建一个空数组$a = @()
要计算你可以做的元素
$a.Count
$x = @()
$x.Count
0
至于处理Get-ADGroup
的结果,取决于它返回的内容。我想你会发现这样做
if($ Groups.Count -eq 0){
#process
}
会为你工作。