2016-07-05 3 views
0

2つのOUに格納されているコンピュータを除いて、自分のドメイン内のすべてのコンピュータを一覧表示しようとしています。 -or演算子を使用して2番目のOUを追加するとすぐに機能が停止します。Powershell:AD内のすべてのコンピュータを検索しますが、特定のOUを除外します

[array]$Computers1 = get-adcomputer -filter '*' -SearchBase 'ou=WorkStations,dc=XXX,dc=XXX,dc=edu' | where { $_.DistinguishedName -notlike "*OU=Test,*" } 

は-Or演算子は私の中に含まれる不要なコンピュータ(これらのOUのの両方に保存されているもの)を引き起こす追加:私は私の最初の不要なOUに保存されているものを除き、すべてのコンピュータを返し、これを使用して

結果。あなたが-andたい

[array]$Computers1 = get-adcomputer -filter '*' -SearchBase 'ou=WorkStations,dc=XXX,dc=XXX,dc=edu' | where { ($_.DistinguishedName -notlike "*OU=Test,*") -or ($_.DistinguishedName -notlike "*OU=TIS,*")} 

答えて

0

、ない-or:私は - と使用する理由

[array]$Computers1 = get-adcomputer -filter '*' -SearchBase 'ou=WorkStations,dc=XXX,dc=XXX,dc=edu' | 
    where { ($_.DistinguishedName -notlike "*OU=Test,*") -and ($_.DistinguishedName -notlike "*OU=TIS,*")} 
+0

あなたは説明できますか?この誤ったことを考えていない限り、論理的には、OU名が「テスト」または「TIS」でなく、結果を返すのではないかと言います。私が間違っていない限り、-and演算子を使っているのは私の望むものではないと思われます。 – tcox8

+0

@ tcox8 '-and'では、真となるためには両方の条件を満たす必要があります。 '-or'を使用すると、真である条件の1つが演算子を満たし、他の条件をテストする必要はありません。これは、コンピュータが複数のOUに存在することができないため、問題です。コンピュータがどちらのOUにも存在しないようにするには、両方を別々に評価する必要があります。 – Matt

+0

@ tcox8あなたは、「OU名は「テスト」または「TIS」ではありません」と言っているのは、「OU名はテストではなく、OU名は「TIS」ではない」ということです。もしあなたが '-or'を使いたいのであれば、あなたはどこに' {-not($ _。DistinguishedName-like "* OU = Test、*")-or($ _。DistinguishedName - 「DeMorgan's Laws」(https://en.wikipedia.org/wiki/De_Morgan%27s_laws)を参照してください。 –

関連する問題