Freigeben über


Informationen zu Vergleichsoperatoren

Kurze Beschreibung

Beschreibt die Operatoren, die Werte in PowerShell vergleichen.

Lange Beschreibung

Mit Vergleichsoperatoren können Sie Bedingungen für den Vergleich von Werten und das Suchen von Werten angeben, die mit angegebenen Mustern übereinstimmen. Um einen Vergleichsoperator zu verwenden, geben Sie die Werte an, die Sie zusammen mit einem Operator vergleichen möchten, der diese Werte trennt.

PowerShell enthält die folgenden Vergleichsoperatoren:

type Operatoren Beschreibung
Gleichheit -eq Ist gleich
-ne nicht gleich
-gt Größer als
-ge Größer als oder gleich
-lt Kleiner als
-le Kleiner als oder gleich
Matching -like Gibt true zurück, wenn die Zeichenfolge mit einem Wildcard übereinstimmt.
pattern
-notlike Gibt true zurück, wenn die Zeichenfolge nicht übereinstimmt.
Wildcardmuster
-match Gibt true zurück, wenn die Zeichenfolge mit regex übereinstimmt.
Muster; $matches enthält übereinstimmende Zeichenfolgen.
-notmatch Gibt true zurück, wenn die Zeichenfolge nicht übereinstimmt.
regex-Muster; $matches enthält Übereinstimmungen.
Zeichenfolgen
Containment -contains Gibt true zurück, wenn der Verweiswert enthalten ist.
in einer Sammlung
-notcontains Gibt true zurück, wenn der Verweiswert nicht
in einer Auflistung enthalten
-in Gibt true zurück, wenn der Testwert in einem
collection
-notin Gibt true zurück, wenn der Testwert nicht enthalten ist.
in einer Sammlung
Ersetzung -Ersetzen Ersetzt ein Zeichenfolgenmuster.
Typ -Ist Gibt true zurück, wenn beide Objekte identisch sind.
Typ
-Is Gibt true zurück, wenn die Objekte nicht identisch sind.
Typ

Standardmäßig wird bei allen Vergleichsoperatoren die Groß-/Kleinschreibung nicht beachtet. Um die Groß-/Kleinschreibung eines Vergleichsoperators zu berücksichtigen, stellen Sie dem Operatornamen eine voran c. Beispielsweise ist die Version von , in der -eq die Groß-/Kleinschreibung beachtet wird -ceq, . Um die Beachtung der Groß-/Kleinschreibung explizit zu machen, stellen Sie dem Operator eine voran i. Beispielsweise ist die Version von explizit ohne Beachtung der -eq Groß-/ -ieqKleinschreibung.

Wenn die Eingabe für einen Operator ein Skalarwert ist, geben Vergleichsoperatoren einen booleschen Wert zurück. Wenn die Eingabe eine Sammlung von Werten ist, geben die Vergleichsoperatoren alle übereinstimmenden Werte zurück. Wenn keine Übereinstimmungen in einer Auflistung vorhanden sind, geben Vergleichsoperatoren ein leeres Array zurück.

PS> (1, 2 -eq 3).GetType().FullName
System.Object[]

Ausnahmen sind die Einschlussoperatoren, die In-Operatoren und die Typoperatoren, die immer einen booleschen Wert zurückgeben.

Hinweis

Wenn Sie einen Wert mit vergleichen müssen, $null sollten Sie auf der linken Seite des Vergleichs platzieren $null . Wenn Sie mit einem Object[] vergleichen$null, ist das Ergebnis False, da das Vergleichsobjekt ein Array ist. Wenn Sie ein Array mit $nullvergleichen, filtert der Vergleich alle im Array gespeicherten $null Werte heraus. Beispiel:

PS> $null -ne $null, "hello"
True
PS> $null, "hello" -ne $null
hello

Gleichheitsoperatoren

Die Gleichheitsoperatoren (-eq, -ne) geben den Wert TRUE zurück, oder der entspricht, wenn mindestens einer der Eingabewerte mit dem angegebenen Muster identisch ist. Das gesamte Muster muss mit einem gesamten Wert übereinstimmen.

Beispiel:

-eq

Beschreibung: Gleich. Enthält einen identischen Wert.

Beispiel:

PS> 2 -eq 2
True

PS> 2 -eq 3
False

PS> 1,2,3 -eq 2
2
PS> "abc" -eq "abc"
True

PS> "abc" -eq "abc", "def"
False

PS> "abc", "def" -eq "abc"
abc

-ne

Beschreibung: Nicht gleich. Enthält einen anderen Wert.

Beispiel:

PS> "abc" -ne "def"
True

PS> "abc" -ne "abc"
False

PS> "abc" -ne "abc", "def"
True

PS> "abc", "def" -ne "abc"
def

-gt

Beschreibung: Größer als.

Beispiel:

PS> 8 -gt 6
True

PS> 7, 8, 9 -gt 8
9

Hinweis

Dies ist nicht zu verwechseln mit >, dem Größer-als-Operator in vielen anderen Programmiersprachen. In PowerShell > wird für die Umleitung verwendet. Weitere Informationen finden Sie unter About_redirection.

-ge

Beschreibung: Größer als oder gleich.

Beispiel:

PS> 8 -ge 8
True

PS> 7, 8, 9 -ge 8
8
9

-lt

Beschreibung: Kleiner als.

Beispiel:


PS> 8 -lt 6
False

PS> 7, 8, 9 -lt 8
7

-le

Beschreibung: Kleiner als oder gleich.

Beispiel:

PS> 6 -le 8
True

PS> 7, 8, 9 -le 8
7
8

Übereinstimmende Operatoren

Die ähnlichen Operatoren (-like und -notlike) finden Elemente, die mit einem angegebenen Muster übereinstimmen oder nicht mit Einem angegebenen Muster übereinstimmen.

Die Syntax ist:

<string[]> -like <wildcard-expression>
<string[]> -notlike <wildcard-expression>

Die Übereinstimmungsoperatoren (-match und -notmatch) suchen elemente, die einem angegebenen Muster entsprechen oder nicht mit regulären Ausdrücken.

Die Übereinstimmungsoperatoren füllen die $Matches automatische Variable auf, wenn die Eingabe (das linke Argument) für den Operator ein einzelnes skalare Objekt ist. Wenn die Eingabe skalar ist, geben die -match Operatoren und -notmatch einen booleschen Wert zurück und legen den Wert der $Matches automatischen Variablen auf die übereinstimmenden Komponenten des Arguments fest.

Die Syntax ist:

<string[]> -match <regular-expression>
<string[]> -notmatch <regular-expression>

-like

Beschreibung: Übereinstimmung mit dem Platzhalterzeichen (*).

Beispiel:

PS> "PowerShell" -like "*shell"
True

PS> "PowerShell", "Server" -like "*shell"
PowerShell

-notlike

Beschreibung: Stimmt nicht mit dem Platzhalterzeichen (*) überein.

Beispiel:

PS> "PowerShell" -notlike "*shell"
False

PS> "PowerShell", "Server" -notlike "*shell"
Server

-match

Beschreibung: Entspricht einer Zeichenfolge mit regulären Ausdrücken. Wenn die Eingabe skalar ist, füllt sie die $Matches automatische Variable auf.

Wenn es sich bei der Eingabe um eine Auflistung handelt, geben die -match Operatoren und -notmatch die übereinstimmenden Elemente dieser Auflistung zurück, aber der Operator füllt die $Matches Variable nicht auf.

Mit dem folgenden Befehl wird beispielsweise eine Sammlung von Zeichenfolgen an den -match Operator übermittelt. Der -match Operator gibt die Elemente in der Auflistung zurück, die übereinstimmen. Die automatische Variable wird nicht aufgefüllt $Matches .

PS> "Sunday", "Monday", "Tuesday" -match "sun"
Sunday

PS> $Matches
PS>

Im Gegensatz dazu übermittelt der folgende Befehl eine einzelne Zeichenfolge an den -match Operator. Der -match Operator gibt einen booleschen Wert zurück und füllt die $Matches automatische Variable auf. Die $Matches automatische Variable ist eine Hashtabelle. Wenn keine Gruppierung oder Erfassung verwendet wird, wird nur ein Schlüssel aufgefüllt. Der 0 Schlüssel stellt den gesamten text dar, der abgeglichen wurde. Weitere Informationen zum Gruppieren und Erfassen mit regulären Ausdrücken finden Sie unter about_Regular_Expressions.

PS> "Sunday" -match "sun"
True

PS> $Matches

Name                           Value
----                           -----
0                              Sun

Es ist wichtig zu beachten, dass die $Matches Hashtabelle nur das erste Vorkommen eines übereinstimmenden Musters enthält.

PS> "Banana" -match "na"
True

PS> $Matches

Name                           Value
----                           -----
0                              na

Wichtig

Der 0 Schlüssel ist eine Ganze Zahl. Sie können eine beliebige Hashtable-Methode verwenden, um auf den gespeicherten Wert zuzugreifen.

PS> "Good Dog" -match "Dog"
True

PS> $Matches[0]
Dog

PS> $Matches.Item(0)
Dog

PS> $Matches.0
Dog

Der -notmatch Operator füllt die $Matches automatische Variable auf, wenn die Eingabe skalar ist und das Ergebnis False ist, wenn er eine Übereinstimmung erkennt.

PS> "Sunday" -notmatch "rain"
True

PS> $matches
PS>

PS> "Sunday" -notmatch "day"
False

PS> $matches

Name                           Value
----                           -----
0                              day

-notmatch

Beschreibung: Stimmt nicht mit einer Zeichenfolge überein. Verwendet reguläre Ausdrücke. Wenn die Eingabe skalar ist, füllt sie die $Matches automatische Variable auf.

Beispiel:

PS> "Sunday" -notmatch "sun"
False

PS> $matches
Name Value
---- -----
0    sun

PS> "Sunday", "Monday" -notmatch "sun"
Monday

Containmentoperatoren

Die Containmentoperatoren (-contains und -notcontains) ähneln den Gleichheitsoperatoren. Die Containmentoperatoren geben jedoch immer einen booleschen Wert zurück, auch wenn es sich bei der Eingabe um eine Auflistung handelt.

Außerdem geben die Containmentoperatoren im Gegensatz zu den Gleichheitsoperatoren einen Wert zurück, sobald sie die erste Übereinstimmung erkennen. Die Gleichheitsoperatoren werten alle Eingaben aus und geben dann alle Übereinstimmungen in der Auflistung zurück.

-contains

Beschreibung: Containment-Operator. Gibt an, ob eine Auflistung von Verweiswerten einen einzelnen Testwert enthält. Gibt immer einen booleschen Wert zurück. Gibt TRUE nur zurück, wenn der Testwert genau mit mindestens einem der Referenzwerte übereinstimmt.

Wenn der Testwert eine Auflistung ist, verwendet der Contains-Operator Verweisgleichheit. Sie gibt TRUE nur zurück, wenn einer der Verweiswerte instance des Testwertobjekts identisch ist.

In einer sehr großen Auflistung gibt der -contains Operator Ergebnisse schneller zurück als der Operator gleich dem Operator.

Syntax:

<Reference-values> -contains <Test-value>

Beispiele:

PS> "abc", "def" -contains "def"
True

PS> "Windows", "PowerShell" -contains "Shell"
False  #Not an exact match

# Does the list of computers in $DomainServers include $ThisComputer?
PS> $DomainServers -contains $thisComputer
True

PS> "abc", "def", "ghi" -contains "abc", "def"
False

PS> $a = "abc", "def"
PS> "abc", "def", "ghi" -contains $a
False
PS> $a, "ghi" -contains $a
True

-notcontains

Beschreibung: Containment-Operator. Gibt an, ob eine Auflistung von Verweiswerten einen einzelnen Testwert enthält. Gibt immer einen booleschen Wert zurück. Gibt TRUE zurück, wenn der Testwert für mindestens einen der Referenzwerte nicht exakt übereinstimmt.

Wenn der Testwert eine Auflistung ist, verwendet der NotContains-Operator Verweisgleichheit.

Syntax:

<Reference-values> -notcontains <Test-value>

Beispiele:

PS> "Windows", "PowerShell" -notcontains "Shell"
True  #Not an exact match

# Get cmdlet parameters, but exclude common parameters
function get-parms ($cmdlet)
{
    $Common = "Verbose", "Debug", "WarningAction", "WarningVariable",
      "ErrorAction", "ErrorVariable", "OutVariable", "OutBuffer"

    $allparms = (Get-Command $Cmdlet).parametersets |
      foreach {$_.Parameters} |
        foreach {$_.Name} | Sort-Object | Get-Unique

    $allparms | where {$Common -notcontains $_ }
}

# Find unapproved verbs in the functions in my module
PS> $ApprovedVerbs = Get-Verb | foreach {$_.verb}
PS> $myVerbs = Get-Command -Module MyModule | foreach {$_.verb}
PS> $myVerbs | where {$ApprovedVerbs -notcontains $_}
ForEach
Sort
Tee
Where

-in

Beschreibung: In-Operator. Gibt an, ob ein Testwert in einer Auflistung von Verweiswerten angezeigt wird. Geben Sie immer als boolescher Wert zurück. Gibt TRUE nur zurück, wenn der Testwert genau mit mindestens einem der Referenzwerte übereinstimmt.

Wenn der Testwert eine Auflistung ist, verwendet der In-Operator Verweisgleichheit. Sie gibt TRUE nur zurück, wenn einer der Verweiswerte instance des Testwertobjekts identisch ist.

Der -in Operator wurde in PowerShell 3.0 eingeführt.

Syntax:

<Test-value> -in <Reference-values>

Beispiele:

PS> "def" -in "abc", "def"
True

PS> "Shell" -in "Windows", "PowerShell"
False  #Not an exact match

PS> "Windows" -in "Windows", "PowerShell"
True  #An exact match

PS> "Windows", "PowerShell" -in "Windows", "PowerShell", "ServerManager"
False  #Using reference equality

PS> $a = "Windows", "PowerShell"
PS> $a -in $a, "ServerManager"
True  #Using reference equality

# Does the list of computers in $DomainServers include $ThisComputer?
PS> $thisComputer -in  $domainServers
True

-notin

Beschreibung: Gibt an, ob ein Testwert in einer Auflistung von Verweiswerten angezeigt wird. Gibt immer einen booleschen Wert zurück. Gibt TRUE zurück, wenn der Testwert keine exakte Übereinstimmung für mindestens einen der Referenzwerte ist.

Wenn der Testwert eine Auflistung ist, verwendet der In-Operator Verweisgleichheit. Sie gibt TRUE nur zurück, wenn einer der Verweiswerte instance des Testwertobjekts identisch ist.

Der -notin Operator wurde in PowerShell 3.0 eingeführt.

Syntax:

<Test-value> -notin <Reference-values>

Beispiele:

PS> "def" -notin "abc", "def"
False

PS> "ghi" -notin "abc", "def"
True

PS> "Shell" -notin "Windows", "PowerShell"
True  #Not an exact match

PS> "Windows" -notin "Windows", "PowerShell"
False  #An exact match

# Find unapproved verbs in the functions in my module
PS> $ApprovedVerbs = Get-Verb | foreach {$_.verb}
PS> $MyVerbs = Get-Command -Module MyModule | foreach {$_.verb}

PS> $MyVerbs | where {$_ -notin $ApprovedVerbs}
ForEach
Sort
Tee
Where

Ersatzoperator

Der -replace Operator ersetzt einen Wert ganz oder teilweise durch den angegebenen Wert mithilfe regulärer Ausdrücke. Sie können den -replace Operator für viele administrative Aufgaben verwenden, z. B. 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' }

Die Syntax des -replace Operators lautet wie folgt, wobei der <original> Platzhalter die zu ersetzenden Zeichen und der <substitute> Platzhalter die Zeichen darstellt, die sie ersetzen:

<input> <operator> <original>, <substitute>

Standardmäßig wird beim -replace Operator die Groß-/Kleinschreibung nicht beachtet. Verwenden Sie -creplace, um die Groß-/Kleinschreibung zu berücksichtigen. Verwenden Sie , um die Groß-/Kleinschreibung explizit zu berücksichtigen -ireplace.

Betrachten Sie die folgenden Beispiele:

PS> "book" -replace "B", "C"
Cook
"book" -ireplace "B", "C"
Cook
"book" -creplace "B", "C"
book

Es ist auch möglich, reguläre Ausdrücke zu verwenden, um Text mithilfe von Erfassungsgruppen und Ersetzungen dynamisch zu ersetzen. Weitere Informationen finden Sie unter about_Regular_Expressions.

ScriptBlock-Ersetzungen

Ab PowerShell 6 können Sie ein ScriptBlock-Argument für den Ersetzungstext verwenden. Der ScriptBlock wird für jede Übereinstimmung in der Eingabezeichenfolge ausgeführt.

Verwenden Sie im ScriptBlock die $_ automatische Variable, um auf das aktuelle System.Text.RegularExpressions.Match-Objekt zu verweisen. Das Match-Objekt bietet Ihnen Zugriff auf den aktuellen Eingabetext, der ersetzt wird, sowie auf andere nützliche Informationen.

In diesem Beispiel wird jede Sequenz von drei Dezimalstellen durch das Zeichenäquivalent ersetzt. ScriptBlock wird für jeden Satz von drei Dezimalstellen ausgeführt, die ersetzt werden müssen.

PS> "072101108108111" -replace "\d{3}", {[char][int]$_.Value}
Hello

Typvergleich

Die Typvergleichsoperatoren (-is und -isnot) werden verwendet, um zu bestimmen, ob ein Objekt ein bestimmter Typ ist.

-Ist

Syntax:

<object> -is <type reference>

Beispiel:

PS> $a = 1
PS> $b = "1"
PS> $a -is [int]
True
PS> $a -is $b.GetType()
False

-Is

Syntax:

<object> -isnot <type reference>

Beispiel:

PS> $a = 1
PS> $b = "1"
PS> $a -isnot $b.GetType()
True
PS> $b -isnot [int]
True

SIEHE AUCH