• 20.01.2021
  • 12 Minuten zum Lesen
    • S
    • s
    • a
    • s
    • q
    • +1

Kurzbeschreibung

Die Vergleichsoperatoren in PowerShell können entweder zwei Werte oder Filterelemente einer Sammlung mit einem Eingabewert vergleichen.,

Lange Beschreibung

Mit Vergleichsoperatoren können Sie Werte vergleichen oder Werte finden, die bestimmten Mustern entsprechen.,nt

-contains collection contains a value -notcontains collection does not contain a value -in value is in a collection -notin value ist nicht in einer Sammlung Type -is beide Objekte sind vom gleichen Typ -isnot Die Objekte sind nicht vom gleichen Typ

Gemeinsame Merkmale

Standardmäßig sind alle Vergleichsoperatoren groß-und Kleinschreibung., Um einen comparisonoperator case-sensitive zu machen, fügen Sie eine c nach der -. Zum Beispiel ist -ceq diecase-sensitive Version von -eq. Um die Groß-und Kleinschreibung explizit zu machen,fügen Sie eine i vor -. Zum Beispiel ist -ieq die explizite Groß-und Kleinschreibung von -eq.

Wenn die Eingabe eines Operators ein Skalarwert ist, gibt der Operator einen booleschen Wert zurück., Wenn die Eingabe eine Sammlung ist, gibt der Operator dieelemente der Sammlung, die dem rechten Wert des Ausdrucks entsprechen.Wenn die Sammlung keine Übereinstimmungen enthält, geben Vergleichsoperatoren ein emptyarray zurück.,v>

Object0

Es gibt einige Ausnahmen:

  • Die Containment-und Typoperatoren geben immer einen booleschen Wert zurück
  • Der Operator -replace gibt das Ersetzungsergebnis zurück
  • Die Operatoren -match und -notmatch füllen Sie die $Matches automaticvariable

Gleichheitsoperatoren

– eq und-ne

Wenn die linke Seite skalar ist, gibt -eq True zurück, wenn die rechte Seite genau übereinstimmt, andernfalls gibt -eq False zurück., -ne tut theopposite; es gibt False zurück, wenn beide Seiten übereinstimmen; andernfalls -ne returnsTrue.

Beispiel:

Wenn die linke Seite eine Sammlung ist, gibt -eq die Elemente zurück, die mit der rechten Seite übereinstimmen, während -ne sie herausfiltert.

Beispiel:

1,2,3 -eq 2 # Output: 2"abc", "def" -eq "abc" # Output: abc"abc", "def" -ne "abc" # Output: def

Diese Operatoren verarbeiten alle Elemente der Sammlung. Beispiel:

"zzz", "def", "zzz" -eq "zzz"
zzzzzz

Die Gleichheitsoperatoren akzeptieren zwei beliebige Objekte, nicht nur einen Skalar oder eine Sammlung.,Das Vergleichsergebnis ist jedoch für den Endbenutzer nicht garantiert aussagekräftig.Das folgende Beispiel zeigt das Problem.

False

In diesem Beispiel haben wir zwei Objekte mit identischen Eigenschaften. Das Testergebnis ist jedoch falsch, da es sich um unterschiedliche Objekte handelt. Um zu erstellenvergleichbare Klassen, müssen Sie System implementieren.IEquatable<T> in yourclass. Das folgende Beispiel zeigt die partielle Implementierung der aMyFileInfoSet-Klasse, die System implementiert.,IEquatable<T> und hat zwei Eigenschaften, Datei und Größe. DieEquals() – Methode gibt True zurück, wenn die Eigenschaften File und Size von zwei MyFileInfoSet-Objekten identisch sind.

True

Ein prominentes Beispiel für den Vergleich beliebiger Objekte besteht darin, herauszufinden, ob sie null sind. Wenn Sie jedoch feststellen müssen, ob eine Variable $null, müssen Sie$null auf die linke Seite des Gleichheitsoperators setzen. Es auf die rechte Seite zu stellen, macht nicht das, was man erwartet.,

For example, let $a be an array containing null elements:

$a = 1, 2, $null, 4, $null, 6

The following tests that $a is not null.

$null -ne $a
False

The following, however, filers out all null elements from $a:

$a -ne $null # Output: 1, 2, 4, 6
1246

-gt, -ge, -lt, and -le

-gt, -ge, -lt, and -le behave very similarly., Wenn beide Seiten skaliert sindSie geben True oder False zurück, je nachdem, wie sich die beiden Seiten vergleichen:

Operator Gibt True zurück, wenn…,
-gt Die linke Seite ist größer
-ge Die linke Seite ist größer oder gleich
-lt Die linke Seite ist kleiner
-le Die linke Seite ist kleiner oder gleich

In den folgenden Beispielen geben alle Anweisungen True zurück.

8 -gt 6 # Output: True8 -ge 8 # Output: True6 -lt 8 # Output: True8 -le 8 # Output: True

Hinweis

In den meisten Programmiersprachen ist der Operator größer als >., InPowerShell wird dieses Zeichen für die Umleitung verwendet. Einzelheiten finden Sie unterabout_redirection.

Wenn die linke Seite eine Sammlung ist, vergleichen diese Operatoren jedes Mitglied der Sammlung mit der rechten Seite. Abhängig von ihrer Logik behalten oder verwerfen sie das Mitglied.

Beispiel:

Test collection:56789Members greater than 789Members greater than or equal to 7789Members smaller than 756Members smaller than or equal to 7567

Diese Operatoren arbeiten mit jeder Klasse, die System implementiert.IComparable.

Beispiele:

Das folgende Beispiel zeigt, dass es auf einem amerikanischen QWERTYkeyboard kein Symbol gibt, das nach ‚a’sortiert wird., Es speist eine Menge, die alle diese Symbole enthält, mit dem Operator -gt, um sie mit ‚a’zu vergleichen. Die Ausgabe ist ein leeres array.

$a=' ','`','~','!','@','#','$','%','^','&','*','(',')','_','+','-','=', '{','}','',':',';','"','''','\','|','/','?','.','>',',','<'$a -gt 'a'# Output: Nothing

Wenn die beiden Seiten der Operatoren nicht vernünftigerweise vergleichbar sind, weisen diese Operatorenauf einen nicht abschließenden Fehler hin.

Übereinstimmende Operatoren

Die Syntax lautet:

Wenn die Eingabe dieser Operatoren ein Skalarwert ist, geben sie einen Booleschen Wert zurück. Wenn die Eingabe eine Sammlung von Werten ist, geben die Operatoren anymatching Mitglieder. Wenn in einer Sammlung keine Übereinstimmungen vorhanden sind, geben die Operatoren zurückein leeres Array.,

– like and-notlike

und -notlike verhalten sich ähnlich wie -eq und -ne, aber die rechte Seite könnte eine Zeichenfolge sein, die Platzhalter enthält.

Beispiel:

– match and-notmatch

-match und -notmatch Verwenden Sie reguläre Ausdrücke, um in den rechten Seitenwerten nach Mustern zu suchen. Reguläre Ausdrücke können mit komplexen Mustern wie E-Mail-Adressen, UNC-Pfaden oder formatierten Telefonnummern übereinstimmen., Die rechte Seite muss sich an die regulären Ausdrücke halten.

Skalarbeispiele:

Wenn die Eingabe eine Sammlung ist, geben die Operatoren die übereinstimmenden Mitglieder dieser Sammlung zurück.

Sammlungsbeispiele:

-match und -notmatch unterstützen Regex-Erfassungsgruppen. Bei jeder Ausführung überschreiben sie die automatische Variable $Matches. Wenn eine Sammlung ist, ist die$Matches Variable $null., $Matches ist eine Hashtabelle, die immer einen Schlüssel mit dem Namen ‚0‘ hat, in dem die gesamte Übereinstimmung gespeichert ist. Wenn der reguläre expressioncontains capture groups, enthält die $Matches zusätzliche Schlüssel für eachgroup.

Beispiel:

TrueName Value---- -----domain CONTOSOuser jsmith0 was CONTOSO\jsmithDomain name:CONTOSOUser name:jsmith

Einzelheiten finden Sie unter about_Regular_Expressions.

Ersetzungsoperator

Ersetzung durch reguläre Ausdrücke

Wie -match verwendet der -replace Operator reguläre Ausdrücke, um dasspezifizierte Muster zu finden., Im Gegensatz zu -match werden die Übereinstimmungen jedoch durch einen anderen bestimmten Wert ersetzt.

Syntax:

<input> -replace <regular-expression>, <substitute>

Der Operator ersetzt einen Wert ganz oder teilweise durch den angegebenen Wert mit regulären Ausdrücken. Sie können den operator für viele administrative Aufgaben,wie das umbenennen von Dateien. Der folgende Befehl ändert beispielsweise die Dateinamenerweiterungen aller.txt – Dateien in .log:

Get-ChildItem *.txt | Rename-Item -NewName { $_.name -replace '\.txt$','.log' }

Standardmäßig ist der Operator -replace groß-und kleinschreibungunempfindlich., To make it casesensitive, use -creplace. To make it explicitly case-insensitive, use-ireplace.

Examples:

"book" -ireplace "B", "C" # Case insensitive"book" -creplace "B", "C" # Case-sensitive; hence, nothing to replace
Cookbook

Regular expressions substitutions

It is also possible to use regular expressions to dynamically replace textusing capturing groups, and substitutions. Capture groups can be referenced inthe <substitute> string using the dollar sign ($) character before thegroup identifier.,

Im folgenden Beispiel akzeptiert der Operator -replace einen Benutzernamen in Form von und konvertiert in das Format [email protected]:

[email protected]

Warnung

Die $ Zeichen hat syntaktische Rollen in PowerShell und regularexpressions:

  • In PowerShell, zwischen doppelten Anführungszeichen, bezeichnet Variablen und Variablen als Unterausdruckoperator.,
  • In Regex-Suchzeichenfolgen bezeichnet es das Ende der Zeile
  • In Regex-Ersetzungszeichenfolgen bezeichnet es erfasste Gruppen Als solche, seien Sie sicher, dass Sie Ihre regulären Ausdrücke entweder zwischen einzelne Anführungszeichen setzen oderinsertieren Sie ein backtick (`) Zeichen vor ihnen.

Zum Beispiel:

$$ in Regex bezeichnet ein Literal $. Dieses $$ in der substitution string toinclude a a literal $ in der resultierenden Ersatz., Beispiel:

'5.72' -replace '(.+)', '$ $1' # Output: $ 5.72'5.72' -replace '(.+)', '$$$1' # Output: $5.72'5.72' -replace '(.+)', '$$1' # Output: $1

Weitere Informationen finden Sie unter about_Regular_Expressions andSubstitutions in Regular Expressions.

Ersetzen in einer Sammlung

Wenn der zum-replace Operator eine Sammlung ist, Powershellanwendet den Ersatz für jeden Wert in der Sammlung. Beispiel:

"B1","B2","B3","B4","B5" -replace "B", 'a'a1a2a3a4a5

Ersatz durch einen Skriptblock

In PowerShell 6 und höher akzeptiert der Operator -replace auch einen Skriptblock, der den Ersatz durchführt., Der Skriptblock wird für jedes Match einmal ausgeführt.

Syntax:

<String> -replace <regular-expression>, {<Script-block>}

Verwenden Sie im Skriptblock die automatische Variable $_, um auf den zu ersetzenden Inputtext und andere nützliche Informationen zuzugreifen. Der Klassentyp dieser Variablen istSystem.Text.RegularExpressions.Spiel.

Das folgende Beispiel ersetzt jede Folge von drei Ziffern durch die characterequivalents. Der Skriptblock wird für jeden Satz von drei Ziffern ausgeführt, der verlegt werden muss.,

"072101108108111" -replace "\d{3}", {return $_.Value}
Hello

Containment operatoren

Die containment operatoren (-contains, -notcontains, -in, und -notin) aresimilar zu den Gleichheitsoperatoren, außer dass sie immer einen Booleschen Wert zurückgeben, auch wenn die Eingabe eine Sammlung ist. Diese Operatoren hören auf, Assoon zu vergleichen, wenn sie die erste Übereinstimmung erkennen, während die Gleichheitsoperatoren Allinput-Mitglieder bewerten. In einer sehr großen Sammlung kehren diese Operatoren schneller zurück als die Gleichheitsoperatoren.,

Syntax:

– contains and-notcontains

Diese Operatoren geben an, ob eine Menge ein bestimmtes Element enthält. -containsgibt True zurück, wenn die rechte Seite (Testobjekt) mit einem der Elemente in der Menge übereinstimmt. -notcontains gibt stattdessen False zurück. Wenn das Testobjekt eine Sammlung ist, verwenden diese Operatoren Referenzgleichheit, dh sie prüfen, ob eines der Elemente der Menge dieselbe Instanz des Testobjekts ist.,

Beispiele:

Komplexere Beispiele:

-in und-notin

Die-in und- notin Operatoren wurden in PowerShell 3 eingeführt, da diesyntaktische Umkehrung der voncontains und-notcontain Operatoren. -ingibt True zurück, wenn die linke Seite <test-object> mit einem derElemente in der Menge übereinstimmt. -notin gibt stattdessen False zurück., Wenn das Testobjekt eine Menge ist, verwenden diese Operatoren Referenzgleichheit, um zu überprüfen, ob eines der Elemente dieser Gruppe dieselbe Instanz des Testobjekts ist.

Die folgenden Beispiele machen dasselbe wie die Beispiele für -containund -notcontain, aber sie werden stattdessen mit -in und -notin geschrieben.

Komplexere Beispiele:

Typvergleich

Die Typvergleichsoperatoren (-is und -isnot) werden verwendet, um festzustellen, ob anobject ein bestimmter Typ ist.,

Syntax:

Written by 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.