为启用的计算机帐户筛选Powershell脚本奇怪的结果

时间:2017-02-07 18:07:21

标签: powershell

Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 359.00:00:00 -Searchbase "OU=Disabled Computers,DC=mydomain,DC=net"

使用Where {$_.enabled -eq 'false'}过滤上一个脚本时,我没有得到任何结果。

但是当使用Where {$_.enabled -ne 'true'}过滤时,我会得到预期的结果。

任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

这是因为enabled属性不是字符串False。但是是一个布尔值,在显示时会被格式化为字符串。例如,如果您评估$false,您将收到类似字符串False的内容。但是,如果您评估$False | Get-Member,您会看到TypeName: System.Boolean

这意味着您应该与$False而不是"False"

进行比较
$InactiveComputers = Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 359.00:00:00 -Searchbase "OU=Disabled Computers,DC=mydomain,DC=net"
#Displaying that enabled property is System.Boolean
$InactiveComputers[0].enabled | Get-Member
$InactiveComputers | Where {$_.enabled -eq $False}

编辑:

或者,通过切换比较的顺序,您可以动态地将$False转换为字符串。这是"False" -eq $False$False -eq "False"

之间的差异
$InactiveComputers = Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 359.00:00:00 -Searchbase "OU=Disabled Computers,DC=mydomain,DC=net"
$InactiveComputers | Where {"False" -eq $_.enabled}