在PowerShell中的空列表上运行.count
时,结果为空,而不是0
。为了进一步利用实际金额,我使用了一个我喜欢摆脱的丑陋的解决方法:
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
?
答案 0 :(得分:3)
问题在于,如果表达式返回一个项目,则会获得该项目,而不是列表。 @()
运算符会将其转换为列表(如果它还不是列表):
$resultCount = (@(Get-ADUser -properties memberof -filter { ... } | Select Name)).count
答案 1 :(得分:1)
$resultCount = ((get-aduser -filter {name -like "*z*"}).Name).count
即使在空数组的情况下也会返回0。在数组上调用.Name
将创建名称数组。在现代powershell中,每个变量即使不是数组也具有.count
属性,可以解决[0]
。
答案 2 :(得分:0)
在使用count方法之前尝试Measure-Object。
$resultCount = (Get-ADUser -properties memberof -filter { ... } | Select Name| Measure-Object).count
答案 3 :(得分:0)
将列表转换为数组有帮助吗?
$resultCount = (Get-ADUser -properties memberof -filter { ... } | Select -ExpandProperty Name).Count