2016-07-05 11 views
0

Ich versuche, alle Computer in meiner Domäne aufzulisten, mit Ausnahme derer, die in einer der beiden OUs gespeichert sind. Sobald ich die zweite OU mit dem -oder Operator hinzufüge, brechen die Dinge ab.Powershell: Finden Sie alle Computer in AD, aber schließen Sie bestimmte OUs aus

diese Verwendung kehre ich alle Computer mit Ausnahme der in meinem ersten unerwünschten ou gespeichert:

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

der -oder Operator bewirkt, dass die unerwünschten Computer (die in beiden dieser OU gespeichert) Hinzufügen in meinem aufgenommen werden Ergebnisse.

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

Antwort

0

Sie -and wollen, nicht -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

Können Sie erklären, warum ich -und verwenden würde? Wenn ich nicht darüber nachdenke, logischerweise sage ich, wenn der Name der Organisationseinheit nicht "test" ODER "TIS" ist, dann gebe die Ergebnisse zurück. Scheint, dass die Verwendung von -und Operator nicht das ist, was ich will (außer ich denke falsch) – tcox8

+0

@ tcox8 Mit '-und' muss es beide Bedingungen erfüllen, um wahr zu sein. Wenn Sie "-or" verwenden, erfüllt eine Bedingung, die wahr ist, den Operator und die andere Bedingung muss nicht getestet werden. Das ist ein Problem, da die Computer nicht in mehr als einer Organisationseinheit sein können. Sie möchten sicher sein, dass sich der Computer in keiner Organisationseinheit befindet, sodass beide separat ausgewertet werden müssen. – Matt

+0

@ tcox8 Sie sagen nicht, dass der Name der Organisationseinheit nicht 'test' ODER 'TIS' ist. Sie sagen "der Name der Organisationseinheit ist nicht 'und der Name der Organisationseinheit ist nicht' TIS '" "nicht". Wenn Sie "-or" verwenden möchten, müssten Sie sagen "where {-not (($ _. DistinguishedName-like" * OU = Test, * ") -oder ($ _. DistinguishedName - wie "* OU = TIS, *"))} 'das ist logisch das gleiche. Siehe [DeMorgans Gesetze] (https://en.wikipedia.org/wiki/De_Morgan%27s_laws). –