Powershell阵列无知

时间:2013-12-05 08:56:07

标签: arrays powershell count

'因为我的无知...... 我使用@($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

2 个答案:

答案 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     } 会为你工作。