2017-02-07 9 views
0
Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 359.00:00:00 -Searchbase "OU=Disabled Computers,DC=mydomain,DC=net" 

Where {$_.enabled -eq 'false'}で前のスクリプトをフィルタリングすると、結果は得られません。有効なコンピュータアカウントのPowershellスクリプトを奇妙な結果

しかし、Where {$_.enabled -ne 'true'}でフィルタリングすると、期待した結果が得られます。

これはなぜでしょうか?

+0

$False -eq "False"の違いでしょうか? – 4c74356b41

+0

はいプロパティはfalseと等しい – Chrismo16

答えて

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をキャストします。これは、 `.enabled`プロパティは` 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} 
+0

それでした。ありがとうございました – Chrismo16

+0

答えがあなたのために働いた場合、それを受け入れることがベストプラクティスです。 – BenH

+0

私はそれをupvoteしようとしたので、私は15未満だからできません。私はそれも同様にそれを受け入れることに適用されたと思った。 – Chrismo16