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ß-/ -ieq
Kleinschreibung.
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 $null
vergleichen, 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