依靠PowerShell

时间:2017-02-28 12:09:50

标签: powershell powershell-v4.0

在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

4 个答案:

答案 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