2017-02-28 49 views
1

在PowerShell的空列表上运行.count时,结果为空,而不是0。为了与实际量我已经用一个丑陋的解决方法,我很愿意进一步合作,以摆脱:在PowerShell中的空列表上计数

Import-Module ActiveDirectory 
$resultCount = (Get-ADUser -properties memberof -filter { ... } | Select Name).count 

write-host "count1: $resultCount" 

if ($resultCount -lt 1) { 
    $resultCount=0 
} 
write-host "" 
write-host "count2: $resultCount" 

当输出为:

count1: 
count2: 0 

我怎样才能摆脱额外的条件,并仍然有0列表为空时的结果?

+1

不能重现这一点,但在这种情况下,显式数组通常会有所帮助,比如'@(Get-ADUser ...)。Count' – TToni

+1

我不能重现这个,我也得到'resultCount'。 –

+0

@TToni/@ Jeff ......也许这是由于另一个PowerShell版本? – pagid

回答

3

问题是,如果您的表达式返回一个项目,您会得到该项目而不是列表。该@()运营商将其转换为一个列表,如果它是不是已经是一个列表:

$resultCount = (@(Get-ADUser -properties memberof -filter { ... } | Select Name)).count 
0

在使用计数方法之前,请尝试测量对象。

$resultCount = (Get-ADUser -properties memberof -filter { ... } | Select Name| Measure-Object).count 
0

是否将列表转换为数组帮助?

$resultCount = (Get-ADUser -properties memberof -filter { ... } | Select -ExpandProperty Name).Count 
1
$resultCount = ((get-aduser -filter {name -like "*z*"}).Name).count 

这甚至在空数组的情况下返回0。在数组上调用.Name将创建数组名称。在现代PowerShell中,每个变量即使不是数组,也具有.count属性,并且可以解决[0]