Der Hauptunterschied zwischen den beiden besteht darin, dass der erste Befehl keinen direkten Vergleich der Werte beinhaltet, um alle Ergebnisse zu erhalten, und der zweite Befehl. Der erste Befehl enthält NULL-Ergebnisse und der zweite nicht (wie MDMarra bereits festgestellt hat). Beide Befehle beginnen mit diesem Cmdlet:
get-aduser
Denken Sie beim Durchgehen des Folgenden daran, dass die Ergebnisse dieses Cmdlets alle AD-Benutzer enthalten, unabhängig davon, ob der -filterParameter danach noch etwas enthält.
Lassen Sie uns nun die beiden Teile aufteilen, die unterschiedlich sind. Der erste:
{-not (description -eq "auto")}
...meint
- „herauszufinden , wo die Beschreibung Attribut gleich den Textstring‚auto‘. Für diesen Vergleich zu der Arbeit, ein String - Bedarf für die im Beschreibungsfeld existiert
-eqBediener in der Lage sein , es zu vergleichen , um zu‚auto‘. NULL - Werte werden von diesem gelöscht Vergleich, da NULL nicht mit einem Zeichenfolgenwert verglichen werden kann.
- unabhängig von der
-eqFilterparameter geben mir ALLES, was NICHT das Ergebnis von ist (description -eq "auto"), das NULL-Werte enthält, da das ursprüngliche Cmdlet get-aduseralle AD-Benutzer enthält. Es musste nichts mit etwas anderem mit dem -notBediener vergleichen. Es gab Ihnen nur alles außer den Ergebnissen des (description -eq "auto")Filters.
Angenommen, Sie haben in Ihrem Beispiel einen AD-Benutzer, dessen Beschreibung gleich "auto" ist, einige hundert mit etwas anderem als "auto" und einige hundert mit NULL-Beschreibungen. Durchlaufen der Befehlslogik:
- Geben Sie mir alle AD-Benutzer (get-aduser), bei denen die Beschreibung gleich "auto" ist - ergibt 1 Benutzer
- Geben Sie mir alle AD-Benutzer, die NICHT das sind, was Sie mir gerade gegeben haben - das Ergebnis sind die wenigen hundert mit etwas anderem UND die wenigen hundert, die NULL haben.
Da mit dem -notOperator nichts mit anderen verglichen werden musste, enthielt das Ergebnis die NULL-Beschreibungsbenutzer, die im ursprünglichen get-aduserCmdlet erfasst wurden.
Der zweite Befehl:
{description -ne "auto"}
...meint
- "Finden Sie heraus, wo das Beschreibungsattribut nicht der exakten Zeichenfolge" auto "entspricht. Damit dieser Vergleich funktioniert, muss im Beschreibungsfeld eine Zeichenfolge vorhanden sein, damit der
-neBediener sie mit" auto "vergleichen kann. NULL-Werte werden aus diesem Vergleich entfernt, da NULL nicht mit einem Zeichenfolgenwert verglichen werden kann.
Nehmen wir in Ihrem Beispiel noch einmal an, Sie haben 1 AD-Benutzer, dessen Beschreibung gleich "auto" ist, einige hundert mit etwas anderem als "auto" und einige hundert mit NULL-Beschreibungen. Durchlaufen der Befehlslogik:
- Geben Sie mir alle AD-Benutzer, bei denen die Beschreibung nicht gleich "auto" ist. Dies führt dazu, dass die wenigen hundert Benutzer etwas anderes als "auto" in ihrer Beschreibung haben. Benutzer mit NULL-Beschreibungen werden nicht abgerufen, da NULL nicht mit einer Textzeichenfolge verglichen werden kann.
In beiden Fällen ist der gesamte Unterschied zwischen den beiden Befehlen definitiv nicht intuitiv.
Mit diesem Befehl sollten Sie auch in der Lage sein, die NULL-Werte mit einem "-und" wie folgt abzufangen:
{description -ne "auto" -and description -ne $NULL}
Ich bin nicht zu 100% mit der Syntax vertraut, da ich sie momentan nicht testen kann, und es gibt wahrscheinlich auch einen besseren Weg, dies zu tun. Wenn alles kaputt ist, ist es ziemlich antiklimatisch und es hat viel Tipparbeit gekostet, um es zu erklären, aber ich bin auf seltsame Dinge wie dieses gestoßen, bevor ich die verschiedenen Operatoren verwendet habe, und viel Versuch und Irrtum, da ich mich nie an alle Vorbehalte erinnern kann das geht mit der Verwendung jedes einzelnen einher.
Referenz: http://technet.microsoft.com/en-us/library/hh847732.aspx :
Vergleichsoperatoren
Verwenden Sie Vergleichsoperatoren (-eq, -ne, -gt, -lt, -le, -ge), um Werte und Testbedingungen zu vergleichen. Sie können beispielsweise zwei Zeichenfolgenwerte vergleichen, um festzustellen, ob sie gleich sind.
Zu den Vergleichsoperatoren gehören die Übereinstimmungsoperatoren (-match, -notmatch), die Muster mithilfe regulärer Ausdrücke finden. der Ersetzungsoperator (-replace), der reguläre Ausdrücke verwendet, um Eingabewerte zu ändern; ähnliche Operatoren (-like, -notlike), die Muster mithilfe von Platzhalterzeichen (*) finden; und die Containment-Operatoren (in, -notin, -contains, -notcontains), die bestimmen, ob ein Testwert in einem Referenzsatz erscheint.
Sie enthalten auch die bitweisen Operatoren (-bAND, -bOR, -bXOR, -bNOT), um die Bitmuster in Werten zu manipulieren.
Weitere Informationen finden Sie unter about_Comparison_Operators
Logische Operatoren
Verwenden Sie logische Operatoren (-and, -or, -xor, -not ,!), Um bedingte Anweisungen zu einer einzigen komplexen Bedingung zu verbinden . Sie können beispielsweise einen logischen Operator -und verwenden, um einen Objektfilter mit zwei verschiedenen Bedingungen zu erstellen.
Weitere Informationen finden Sie unter about_Logical_Operators.