PowerShell Like Operator & Mehr: Verbessern Sie Ihr Skripting-Spiel

Wie viele andere Programmiersprachen verfügt auch PowerShell über verschiedene Vergleichsoperatoren. Allerdings sehen diese im Vergleich zu anderen Sprachen etwas seltsam aus. Anstatt == verwendet man eq. Anstatt <> gibt es ne. Das kann für Anfänger verwirrend sein. In diesem Artikel werden wir uns den PowerShell-Like-Operator und andere Vergleichsoperatoren genauer anschauen.

Überprüfen der Gleichheit mit den Operatoren eq und ceq

Um in PowerShell zu überprüfen, ob ein Objekt einem anderen Objekt entspricht, wird der Operator eq verwendet. Der eq-Operator vergleicht einfache Objekte verschiedener Typen wie Zeichenketten, boolesche Werte, Ganzzahlen usw. Bei Verwendung des eq-Operators wird entweder der boolesche Wert True oder False je nach Ergebnis zurückgegeben.

Der Operator -eq benötigt zwei Werte, die verglichen werden sollen. Angenommen, Sie weisen einer Variablen namens $string eine Zeichenkette zu. Sie möchten den Wert dieser Variable mit dem Zeichenkettenwert "PowerShell" vergleichen, um sicherzustellen, dass sie gleich sind.

Im folgenden Beispiel sehen Sie, dass der Wert PowerShell der Variablen $string zugewiesen wird. Anschließend vergleicht das Beispiel den Wert von $string mit dem String powershell mithilfe des Operators eq. Einfach genug, oder? Aber Moment, sie sind eigentlich nicht gleich.

PS> $string = "PowerShell"
PS> $string -eq "powershell"
True

Beachten Sie, dass = ein Zuweisungsoperator und KEIN Vergleichsoperator ist. Sie können = nicht verwenden, um einen Wert mit einem anderen in PowerShell zu vergleichen.

Testen der Groß-/Kleinschreibung mit dem Operator ceq

Im obigen Beispiel sehen Sie, wie eq einen booleschen Wert True zurückgibt, obwohl der String nicht genau gleich ist. Dieses Verhalten tritt auf, weil der Operator eq die Groß-/Kleinschreibung nicht beachtet. Um die Unterscheidung von Groß-/Kleinschreibung zu testen, verwenden Sie den Operator ceq. Der Operator ceq funktioniert genauso wie eq, ist jedoch auf Groß-/Kleinschreibung empfindlich.

Im folgenden Code-Snippet sehen Sie ein Beispiel für die Verwendung von ceq. Beachten Sie, wie PowerShell den Unterschied in der Groß-/Kleinschreibung erkennt.

PS> $string -ceq "PowerShell"
True 
PS> $string -ceq "powershell"
False

Testen von Ungleichheit mit den Operatoren ne und cne

Genau wie eq und ceq für die Gleichheit testen, hat PowerShell ein Paar von Operatoren, die das genaue Gegenteil tun, nämlich ne und cne. Diese beiden Operatoren führen wie ihre Gegenstücke die gleiche Operation aus, jedoch das Gegenteil.

PS> $string = "PowerShell"
PS> $string -ne "PowerShell"
False
PS> $string -cne "PowerShell"
False
PS> $string -cne "powershell"
True

Testen von Elementen in einer Sammlung

Normalerweise werden die Operatoren eq und ceq für Skalare oder einzelne Werte wie Strings, Ganzzahlen und boolesche Werte verwendet. Aber diese Operatoren können auch Instanzen bestimmter Werte in einer Sammlung wie einem Array finden.

Beachten Sie in dem folgenden Beispiel, dass wir ein Array mit 12 Ganzzahlen erstellen. Vielleicht möchten Sie alle Instanzen in diesem Array finden, die der Zahl 9 entsprechen. Kein Problem, verwenden Sie den Operator eq gegen das Array, um alle Instanzen der verglichenen Ganzzahl zurückzugeben.

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -eq 9
9
9
9
9
PS> ($array -eq 9).Count
4

Testen von Sammlungen auf enthaltene Werte

Nachdem Sie gerade gelernt haben, den Operator eq zur Suche nach Instanzen in Arrays zu verwenden, gehen wir einen Schritt weiter und stellen Ihnen die „Enthaltens“-Operatoren vor. Diese Operatoren sind contains, notcontains, in und notin. Diese Operatoren geben einen booleschen Wert True oder False zurück, wenn eine Sammlung ein Element enthält oder nicht.

Schauen Sie sich das folgende Beispiel an. In diesem Beispiel erstellen wir ein Array mit neun Ganzzahlen. Wenn Sie eine einfache Ja/Nein-Antwort darauf möchten, ob dieses Array eine bestimmte Ganzzahl enthält, können Sie das mit contains oder notcontains bekommen.

PS> $array = @(2,4,5,6,8,8,9,9,9)
PS> $array -contains 9
True
PS> $array -notcontains 9
False
PS> $array -contains 5

Gleiches gilt für die Operatoren in und notin. Diese Operatoren sind nahezu identisch zu contains und notcontains mit einer Ausnahme: Der zu vergleichende Wert steht links anstelle von rechts.

$array = @(2,4,5,6,8,8,9,9,9)
9 -in $array
True
9 -notin $array
False

Testen von „Größer als“ mit den Operatoren gt und ge

Was passiert, wenn Sie testen müssen, ob eine Zahl (eine Ganzzahl) eine andere Zahl größer als ist oder vielleicht größer oder gleich einer anderen Zahl ist? Sie verwenden die Operatoren gt und ge. Diese Operatoren vergleichen Ganzzahlen.

Wie die anderen Operatoren geben auch diese Operatoren je nachdem, ob eine Ganzzahl größer als eine andere ist, einen booleschen Wert True oder False zurück. Beide Operatoren testen, ob die linke Ganzzahl größer als oder größer als oder gleich der rechten Ganzzahl ist.

In dem untenstehenden Beispiel können Sie sehen, wie sich jeder dieser Operatoren verhält.

PS> 7 -gt 5
True
PS> 7 -gt 7
False
PS> 7 -ge 7
True

Ähnlich wie der eq-Operator, mit dem Sie Instanzen in Sammlungen finden können, können Sie dies auch mit den Operatoren ge und gt tun. PowerShell durchsucht jedes Element in einer Sammlung und vergleicht jeden Wert mit dem von Ihnen angegebenen Wert. Ein großartiges Beispiel dafür finden Sie unten.

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -gt 5
6
7
8
9
9
9
9
PS> $array -ge 5
5
6
7
8
9
9
9
9

Testen von „kleiner als“ mit den Operatoren lt und le

Ähnlich wie bei den Operatoren gt und ge erfüllen die Operatoren lt und le die gleiche Funktion, jedoch umgekehrt. Die Operatoren lt und le vergleichen zwei Werte und testen, ob die Ganzzahl auf der linken Seite kleiner als oder kleiner als oder gleich der Ganzzahl auf der rechten Seite ist.

Im Beispiel unten sehen Sie, dass dieselbe Funktionalität des Vergleichs jedes Werts in einer Sammlung genauso gilt wie bei gt und ge.

PS> $array =@(1,2,3,4,5,6,7,8,9,10)
PS> $array -lt 5
1
2
3
4
PS> $array -le 5 
1
2
3
4
5

Übereinstimmungen basierend auf Platzhaltern mit dem PowerShell Like Operator

Bisher haben Sie gelernt, wie man 1:1-Übereinstimmungen durchführt. Alle bisher verwendeten Operatoren verglichen einen ganzen Wert mit einem anderen, aber PowerShell hat noch einen weiteren Trick auf Lager. Sie können Werte auch anhand von Platzhaltern oder Sternchen vergleichen.

Angenommen, Sie kennen nur einige Zeichen einer Zeichenkette. Sie können „eq“ nicht verwenden, weil „eq“ erfordert, dass Sie die gesamte Zeichenkette kennen. Mit dem PowerShell „like“-Operator müssen Sie die gesamte Zeichenkette nicht kennen. Um zu testen, ob ein Wert einem anderen ähnlich ist, können Sie den Teil, den Sie nicht kennen, durch einen Platzhalter ersetzen.

Wie bei anderen Operatoren kann diese Funktionalität auch auf Sammlungen angewendet werden.

Unten sehen Sie ein Beispiel für den PowerShell „like“-Operator und seinen case-sensitiven Bruder „clike“.

PS> $string = "PowerShell"
PS> $string -like "*Shell"
True
PS> $array = @("PowerShell","Microsoft")
PS> $array -like "*Shell"
PowerShell
PS> $array -clike "*Shell"
PowerShell

Der Operator „-notlike“ gibt den booleschen Wert „True“ zurück, wenn keine Übereinstimmung gefunden wurde, und „False“, wenn eine Übereinstimmung vorliegt. Bei Verwendung gegen eine Sammlung gibt er alle anderen Werte zurück, die nicht dem auf der rechten Seite des Operators „-notlike“ angegebenen Muster entsprechen. Um die Groß- und Kleinschreibung auf das Muster anzuwenden, verwenden Sie den Operator „-cnotlike“.

$string = "PowerShell" 
$string -notlike "*Shell"
False
$array = @("PowerShell","Microsoft")
$array -notlike "*Shell"
Microsoft
$array -cnotlike "*shell"
PowerShell
Microsoft

Übereinstimmung anhand eines regulären Ausdrucks.

Der PowerShell-ähnliche Operator und sein Verwandter sind praktisch, aber sobald Sie komplexere Übereinstimmungen benötigen, können Sie in die tiefe, dunkle Welt der regulären Ausdrücke (Regex) eintauchen. Mit den Operatoren match und notmatch können Sie äußerst komplexe Zeichenkettenübereinstimmungen mit Regex durchführen.

Ähnlich wie der PowerShell-ähnliche Operator vergleicht match und sein Gegenteil notmatch zwei Zeichenketten und gibt einen booleschen Wert True oder False zurück. Wie bei den anderen Operatoren kann das gleiche Verhalten auch für eine Sammlung angewendet werden, wie das folgende Beispiel zeigt.

PS> $string = "PowerShell"
PS> $string -match "ow"
True 

PS> $array = @("PowerShell","Microsoft")
PS> $array -match "ow"
PowerShell

PS> $string = "PowerShell"
PS> $string -cmatch "po"
False
PS> $string -cmatch "Po"
True

PS> $array = @("PowerShell","Microsoft")
PS> $array -cmatch "Po"
PowerShell

Zusammenfassung

In diesem Artikel haben Sie den PowerShell-ähnlichen Operator und viele andere kennengelernt und gelernt, wie Sie jeden Operator für einzelne Werte und Sammlungen verwenden können. Sie haben gesehen, wie sich die Ausgabe je nach Operator und Skalar- oder Sammlungswert unterscheidet.

Zusätzlich haben Sie auch Operatoren mit Groß- und Kleinschreibung, Übereinstimmungsoperatoren, wie man basierend auf regulären Ausdrücken oder Platzhaltern übereinstimmt, und Enthaltensoperatoren gesehen, um zu testen, ob das Objekt einen bestimmten Wert enthält oder ob ein Wert in einem bestimmten Objekt vorhanden ist.

PowerShell Like

Source:
https://adamtheautomator.com/powershell-like/