about_Comparison_Operators
Kurze Beschreibung
Die Vergleichsoperatoren in PowerShell können entweder zwei Werte vergleichen oder Elemente einer Auflistung anhand eines Eingabewerts filtern.
Lange Beschreibung
Mit Vergleichsoperatoren können Sie Werte vergleichen oder Werte ermitteln, die den angegebenen Mustern entsprechen. PowerShell enthält die folgenden Vergleichsoperatoren:
Gleichheit
-eq
,-ieq
,-ceq
: gleich-ne
,-ine
,-cne
: ungleich-gt
,-igt
,-cgt
: größer als-ge
,-ige
,-cge
: größer als oder gleich-lt
,-ilt
,-clt
: kleiner als-le
,-ile
,-cle
: kleiner als oder gleich
Zuordnung
-like
,-ilike
,-clike
: Zeichenfolge stimmt mit Platzhaltermuster überein-notlike
,-inotlike
,-cnotlike
: Zeichenfolge stimmt nicht mit Platzhaltermuster überein-match
,-imatch
,-cmatch
: Zeichenfolge stimmt mit RegEx-Muster überein-notmatch
,-inotmatch
,-cnotmatch
: Zeichenfolge stimmt nicht mit RegEx-Muster überein
Ersatz
-replace
,-ireplace
,-creplace
: ersetzt Zeichenfolgen, die mit einem RegEx-Muster übereinstimmen
Einschluss
-contains
,-icontains
,-ccontains
: Auflistung enthält einen Wert.-notcontains
,-inotcontains
,-cnotcontains
: Auflistung enthält einen Wert nicht.-in
: Der Wert ist in einer Auflistung enthalten.-notin
: Der Wert ist nicht in einer Auflistung enthalten.
Typ
-is
: Beide Objekte sind vom selben Typ.-isnot
: Die Objekte sind nicht vom selben Typ.
Allgemeine Funktionen
Bei Zeichenfolgenvergleichen wird die Groß-/Kleinschreibung nicht beachtet, es sei denn, Sie verwenden den expliziten Operator für Groß-/Kleinschreibung. Um festzulegen, dass bei einem Vergleichsoperator die Groß-/Kleinschreibung beachtet werden muss, fügen Sie c
nach -
hinzu. Beispielsweise ist -ceq
die Version von -eq
, bei der die Groß-/Kleinschreibung beachtet wird.
Um die Groß-/Kleinschreibung explizit festzulegen, fügen Sie i
nach -
hinzu. Beispielsweise ist -ieq
die Version von -eq
, bei der die Groß-/Kleinschreibung explizit nicht beachtet wird.
Bei Zeichenfolgenvergleichen wird InvariantCulture für Vergleiche mit und ohne Groß- und Kleinschreibung verwendet. Die Vergleiche liegen zwischen Unicode-Codepunkten und verwenden keine kulturspezifische Sortierreihenfolge. Die Ergebnisse sind unabhängig von der aktuellen Kultur gleich.
Wenn der linke Wert im Vergleichsausdruck ein skalarer Wert ist, gibt der Operator einen booleschen Wert zurück. Wenn der linke Wert im Ausdruck eine Auflistung ist, gibt der Operator die Elemente der Auflistung zurück, die dem rechten Wert des Ausdrucks entsprechen. Rechte Werte werden immer als Singletoninstanzen behandelt, auch wenn sie Sammlungen sind. Die Vergleichsoperatoren können Sammlungen nicht effektiv mit Sammlungen vergleichen.
Wenn in der Auflistung keine Übereinstimmungen vorhanden sind, geben Vergleichsoperatoren ein leeres Array zurück. Beispiel:
$a = (1, 2) -eq 3
$a.GetType().Name
$a.Count
Object[]
0
Es gibt ein paar Ausnahmen:
- Die Einschluss- und Typoperatoren geben immer einen booleschen Wert zurück.
- Der
-replace
-Operator gibt das Ersetzungsergebnis zurück. - Die Operatoren
-match
und-notmatch
füllen auch die automatische Variable$Matches
auf, es sei denn, die linke Seite des Ausdrucks ist eine Auflistung.
Gleichheitsoperatoren
-eq und -ne
Wenn die linke Seite ein Skalarwert ist, gibt -eq
True zurück, wenn die rechte Seite gleichwertig ist, andernfalls gibt -eq
False zurück. -ne
macht das Gegenteil: False wird zurückgegeben, wenn beide Seiten gleichwertig sind. Andernfalls gibt -ne
True zurück.
Beispiel:
2 -eq 2 # Output: True
2 -eq 3 # Output: False
"abc" -eq "abc" # Output: True
"abc" -eq "abc", "def" # Output: False
"abc" -ne "def" # Output: True
"abc" -ne "abc" # Output: False
"abc" -ne "abc", "def" # Output: True
Wenn die linke Seite eine Auflistung ist, gibt -eq
die Elemente zurück, die der rechten Seite entsprechen, 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 Auflistung. Beispiel:
"zzz", "def", "zzz" -eq "zzz"
zzz
zzz
Der Gleichheitsoperator kann Objekte unterschiedlicher Typen vergleichen. Es ist wichtig zu verstehen, dass der Wert auf der rechten Seite des Vergleichs für den Vergleich in den Typ des Werts auf der linken Seite konvertiert werden kann.
Die Zeichenfolge '1.0'
wird beispielsweise in eine ganze Zahl konvertiert, die mit dem Wert 1
verglichen werden soll. Dieses Beispiel gibt True
zurück.
PS> 1 -eq '1.0'
True
In diesem Beispiel wird der Wert 1
in eine Zeichenfolge konvertiert, die mit der Zeichenfolge '1.0'
verglichen werden soll. Dieses Beispiel gibt False
zurück.
PS> '1.0' -eq 1
False
Die Gleichheitsoperatoren akzeptieren zwei Objekte, nicht nur einen Skalarwert oder eine Auflistung. Das Ergebnis des Vergleichs ist für Endbenutzer*innen jedoch nicht unbedingt aussagekräftig. Das folgende Beispiel veranschaulicht das Problem:
class MyFileInfoSet {
[String]$File
[Int64]$Size
}
$a = [MyFileInfoSet]@{File = "C:\Windows\explorer.exe"; Size = 4651032}
$b = [MyFileInfoSet]@{File = "C:\Windows\explorer.exe"; Size = 4651032}
$a -eq $b
False
In diesem Beispiel haben wir zwei Objekte mit identischen Eigenschaften erstellt. Das Ergebnis des Gleichheitstests ist jedoch False, da es sich um unterschiedliche Objekte handelt. Um vergleichbare Klassen zu erstellen, müssen Sie System.IEquatable<T> in Ihrer Klasse implementieren. Das folgende Beispiel veranschaulicht die partielle Implementierung einer MyFileInfoSet-Klasse, die System.IEquatable<T> implementiert und über zwei Eigenschaften verfügt: File und Size. Die Equals()
-Methode gibt True zurück, wenn die Eigenschaften „File“ und „Size“ von zwei MyFileInfoSet-Objekten identisch sind.
class MyFileInfoSet : System.IEquatable[Object] {
[String]$File
[Int64]$Size
[bool] Equals([Object] $obj) {
return ($this.File -eq $obj.File) -and ($this.Size -eq $obj.Size)
}
}
$a = [MyFileInfoSet]@{File = "C:\Windows\explorer.exe"; Size = 4651032}
$b = [MyFileInfoSet]@{File = "C:\Windows\explorer.exe"; Size = 4651032}
$a -eq $b
True
Ein häufiges Beispiel für den Vergleich beliebiger Objekte besteht darin, herauszufinden, ob sie NULL sind. Wenn Sie jedoch ermitteln müssen, ob eine Variable $null
ist, müssen Sie $null
auf der linken Seite des Gleichheitsoperators platzieren. Wenn Sie das Element auf der rechten Seite platzieren, führt das nicht zum erwarteten Ergebnis.
Beispiel: $a
ist ein Array sein, das NULL-Elemente enthält:
$a = 1, 2, $null, 4, $null, 6
Mit dem folgenden Code wird getestet, ob $a
nicht NULL ist.
$null -ne $a
True
Im Folgenden werden jedoch alle NULL-Elemente aus $a
herausgefiltert:
$a -ne $null # Output: 1, 2, 4, 6
1
2
4
6
-gt, -ge, -lt und -le
-gt
, -ge
, -lt
und -le
verhalten sich sehr ähnlich. Wenn beide Seiten Skalarwerte sind, geben sie True oder False zurück, je nachdem, wie die beiden Seiten verglichen werden:
Operator | Gibt im folgenden Fall „True“ zurück |
---|---|
-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: True
8 -ge 8 # Output: True
6 -lt 8 # Output: True
8 -le 8 # Output: True
Hinweis
In den meisten Programmiersprachen ist der Größer-als-Operator >
. In PowerShell wird dieses Zeichen für die Umleitung verwendet. Weitere Informationen finden Sie unter about_Redirection.
Wenn die linke Seite eine Auflistung ist, vergleichen diese Operatoren alle Elemente der Auflistung mit der rechten Seite. Je nach Logik behalten oder verwerfen sie das Element.
Beispiel:
$a=5, 6, 7, 8, 9
Write-Output "Test collection:"
$a
Write-Output "`nMembers greater than 7"
$a -gt 7
Write-Output "`nMembers greater than or equal to 7"
$a -ge 7
Write-Output "`nMembers smaller than 7"
$a -lt 7
Write-Output "`nMembers smaller than or equal to 7"
$a -le 7
Test collection:
5
6
7
8
9
Members greater than 7
8
9
Members greater than or equal to 7
7
8
9
Members smaller than 7
5
6
Members smaller than or equal to 7
5
6
7
Diese Operatoren können mit jeder Klasse verwendet werden, die System.IComparable implementiert.
Beispiele:
# Date comparison
[DateTime]'2001-11-12' -lt [DateTime]'2020-08-01' # True
# Sorting order comparison
'a' -lt 'z' # True; 'a' comes before 'z'
'macOS' -ilt 'MacOS' # False
'MacOS' -ilt 'macOS' # False
'macOS' -clt 'MacOS' # True; 'm' comes before 'M'
Das folgende Beispiel zeigt, dass es auf einer amerikanischen QWERTY-Tastatur kein Symbol gibt, das nach „a“ einsortiert wird. Es übergibt einen Satz mit allen derartigen Symbolen an den -gt
-Operator, damit sie mit „a“ verglichen werden. Die Ausgabe ist ein leeres Array.
$a=' ','`','~','!','@','#','$','%','^','&','*','(',')','_','+','-','=',
'{','}','[',']',':',';','"','''','\','|','/','?','.','>',',','<'
$a -gt 'a'
# Output: Nothing
Wenn die beiden Seiten der Operatoren nicht einigermaßen vergleichbar sind, lösen diese Operatoren einen Fehler ohne Abbruch aus.
Abgleichsoperatoren
Die Abgleichsoperatoren (-like
, -notlike
, -match
und -notmatch
) suchen nach Elementen, die mit einem angegebenen Muster übereinstimmen oder nicht übereinstimmen. Das Muster für -like
und -notlike
ist ein Platzhalterausdruck (der *
, ?
und [ ]
enthält). -match
und -notmatch
akzeptieren hingegen einen regulären Ausdruck (RegEx).
Die Syntax lautet:
<string[]> -like <wildcard-expression>
<string[]> -notlike <wildcard-expression>
<string[]> -match <regular-expression>
<string[]> -notmatch <regular-expression>
Wenn die Eingabe dieser Operatoren ein Skalarwert ist, geben sie einen booleschen Wert zurück.
Wenn es sich bei der Eingabe um eine Auflistung von Werten handelt, wird jedes Element in der Auflistung für den Vergleich in eine Zeichenfolge konvertiert. Die Operatoren -match
und -notmatch
geben jeweils alle übereinstimmenden und nicht übereinstimmenden Elemente zurück. Die Operatoren -like
und -notlike
geben die Elemente jedoch als Zeichenfolgen zurück. Die Zeichenfolge, die für ein Element der Auflistung von -like
und -notlike
zurückgegeben wird, ist die Zeichenfolge, die der Operator für den Vergleich verwendet hat. Sie wird durch Umwandeln des Elements in eine Zeichenfolge abgerufen.
-like und -notlike
-like
und -notlike
verhalten sich ähnlich wie -eq
und -ne
, aber die rechte Seite kann eine Zeichenfolge sein, die Platzhalter enthält.
Beispiel:
"PowerShell" -like "*shell" # Output: True
"PowerShell" -notlike "*shell" # Output: False
"PowerShell" -like "Power?hell" # Output: True
"PowerShell" -notlike "Power?hell" # Output: False
"PowerShell" -like "Power[p-w]hell" # Output: True
"PowerShell" -notlike "Power[p-w]hell" # Output: False
"PowerShell", "Server" -like "*shell" # Output: PowerShell
"PowerShell", "Server" -notlike "*shell" # Output: Server
-match und -notmatch
-match
und -notmatch
verwenden reguläre Ausdrücke, um nach Mustern in den Werten auf der linken Seite zu suchen. Reguläre Ausdrücke können komplexen Mustern wie E-Mail-Adressen, UNC-Pfaden oder formatierten Telefonnummern entsprechen. Die Zeichenfolge auf der rechten Seite muss den Regeln für reguläre Ausdrücke entsprechen.
Skalarbeispiele:
# Partial match test, showing how differently -match and -like behave
"PowerShell" -match 'shell' # Output: True
"PowerShell" -like 'shell' # Output: False
# Regex syntax test
"PowerShell" -match '^Power\w+' # Output: True
'bag' -notmatch 'b[iou]g' # Output: True
Wenn es sich bei der Eingabe um eine Auflistung handelt, geben die Operatoren die übereinstimmenden Elemente dieser Auflistung zurück.
Auflistungsbeispiele:
"PowerShell", "Super PowerShell", "Power's hell" -match '^Power\w+'
# Output: PowerShell
"Rhell", "Chell", "Mel", "Smell", "Shell" -match "hell"
# Output: Rhell, Chell, Shell
"Bag", "Beg", "Big", "Bog", "Bug" -match 'b[iou]g'
#Output: Big, Bog, Bug
"Bag", "Beg", "Big", "Bog", "Bug" -notmatch 'b[iou]g'
#Output: Bag, Beg
-match
und -notmatch
unterstützen Regex-Erfassungsgruppen. Jedes Mal, wenn sie für Skalarwerteingaben ausgeführt werden und das -match
-Ergebnis True oder das -notmatch
-Ergebnis False ist, überschreiben sie die automatische Variable $Matches
. $Matches
ist eine Hashtabelle, die immer über einen Schlüssel namens „0“ verfügt, der die gesamte Übereinstimmung speichert.
Wenn der reguläre Ausdruck Erfassungsgruppen enthält, enthält $Matches
zusätzliche Schlüssel für jede Gruppe.
Es ist wichtig zu beachten, dass die Hashtabelle $Matches
nur das erste Vorkommen eines übereinstimmenden Musters enthält.
Beispiel:
$string = 'The last logged on user was CONTOSO\jsmith'
$string -match 'was (?<domain>.+)\\(?<user>.+)'
$Matches
Write-Output "`nDomain name:"
$Matches.domain
Write-Output "`nUser name:"
$Matches.user
True
Name Value
---- -----
domain CONTOSO
user jsmith
0 was CONTOSO\jsmith
Domain name:
CONTOSO
User name:
jsmith
Wenn das -match
-Ergebnis False oder das -notmatch
-Ergebnis True ist oder wenn die Eingabe eine Auflistung ist, wird die automatische Variable $Matches
nicht überschrieben. Folglich ist der zuvor festgelegte Wert oder $null
enthalten, wenn die Variable nicht festgelegt wurde. Beim Verweisen auf $Matches
nach dem Aufrufen eines dieser Operatoren sollten Sie überprüfen, ob die Variable vom aktuellen Operatoraufruf mithilfe einer Bedingungsanweisung festgelegt wurde.
Beispiel:
if ("<version>1.0.0</version>" -match '<version>(.*?)</version>') {
$Matches
}
Ausführliche Informationen finden Sie unter about_Regular_Expressions und about_Automatic_Variables.
Ersetzungsoperator
Ersetzung mit regulären Ausdrücken
Wie -match
verwendet der -replace
-Operator reguläre Ausdrücke, um das angegebene Muster zu finden. Im Gegensatz zu -match
werden die Übereinstimmungen jedoch durch einen anderen angegebenen Wert ersetzt.
Syntax:
<input> -replace <regular-expression>, <substitute>
Der Operator ersetzt den gesamten Wert oder einen Teil eines Werts mithilfe regulärer Ausdrücke durch den angegebenen Wert. Sie können den Operator für viele administrative Aufgaben verwenden, etwa für das Umbenennen von Dateien. Mit dem folgenden Befehl werden beispielsweise die Dateinamenerweiterungen aller .txt
-Dateien in .log
geändert:
Get-ChildItem *.txt | Rename-Item -NewName { $_.name -replace '\.txt$','.log' }
Standardmäßig wird beim -replace
-Operator die Groß-/Kleinschreibung nicht beachtet. Verwenden Sie -creplace
, wenn die Groß-/Kleinschreibung beachtet werden soll. Verwenden Sie -ireplace
, wenn die Groß-/Kleinschreibung explizit nicht beachtet werden soll.
Beispiele:
"book" -ireplace "B", "C" # Case insensitive
"book" -creplace "B", "C" # Case-sensitive; hence, nothing to replace
Cook
book
Wenn der linke Operand in einer -replace
-Operatoranweisung keine Zeichenfolge ist, wird dieser Operand ab PowerShell 7.2. in eine Zeichenfolge konvertiert.
PowerShell führt eine kulturunabhängige Zeichenfolgenkonvertierung durch.
Wenn Ihre Kultur beispielsweise auf „Französisch (fr)“ festgelegt ist, wird der Wert 1.2
bei der kulturabhängigen Zeichenfolgenkonvertierung zu 1,2
.
Vor PowerShell 7.2:
PS> [cultureinfo]::CurrentCulture = 'fr'
PS> 1.2 -replace ','
12
In PowerShell 7.2 und höher:
PS> [cultureinfo]::CurrentCulture = 'fr'
PS> 1.2 -replace ','
1.2
Ersetzungen regulärer Ausdrücke
Es ist auch möglich, reguläre Ausdrücke zu verwenden, um Text mithilfe von Erfassungsgruppen und Ersetzungen dynamisch zu ersetzen. Auf Erfassungsgruppen kann in der <substitute>
-Zeichenfolge mithilfe des Dollarzeichens ($
) vor dem Gruppenbezeichner verwiesen werden.
Im folgenden Beispiel akzeptiert der -replace
-Operator einen Benutzernamen im Format DomainName\Username
und konvertiert ihn in das Format Username@DomainName
:
$SearchExp = '^(?<DomainName>[\w-.]+)\\(?<Username>[\w-.]+)$'
$ReplaceExp = '${Username}@${DomainName}'
'Contoso.local\John.Doe' -replace $SearchExp, $ReplaceExp
John.Doe@Contoso.local
Warnung
Das Zeichen $
hat sowohl in PowerShell als auch in regulären Ausdrücken eine syntaktische Funktion:
- In PowerShell bezeichnet es zwischen doppelten Anführungszeichen Variablen und fungiert als Operator für Teilausdrücke.
- In RegEx-Suchzeichenfolgen bezeichnet es das Ende der Zeile.
- In RegEx-Ersetzungszeichenfolgen bezeichnet es Erfassungsgruppen. Stellen Sie sicher, dass Sie reguläre Ausdrücke entweder zwischen einfache Anführungszeichen setzen oder vor ihnen ein Graviszeichen (
`
) einfügen.
Beispiel:
$1 = 'Goodbye'
'Hello World' -replace '(\w+) \w+', "$1 Universe"
# Output: Goodbye Universe
'Hello World' -replace '(\w+) \w+', '$1 Universe'
# Output: Hello Universe
$$
steht in regulären Ausdrücken tatsächlich für $
. Das $$
-Element in der Ersetzungszeichenfolge gibt an, dass die resultierende Ersetzung tatsächlich $
enthält. 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 und Ersetzungen in regulären Ausdrücken.
Ersetzen in einer Auflistung
Wenn es sich bei der Eingabe (<input>
) für den -replace
-Operator um eine Auflistung handelt, wendet PowerShell die Ersetzung auf jeden Wert in der Auflistung an. Beispiel:
"B1","B2","B3","B4","B5" -replace "B", 'a'
a1
a2
a3
a4
a5
Ersetzung mit einem Skriptblock
In PowerShell 6 und höher akzeptiert der -replace
-Operator auch einen Skriptblock, der die Ersetzung ausführt. Der Skriptblock wird einmal für jede Übereinstimmung ausgeführt.
Syntax:
<String> -replace <regular-expression>, {<Script-block>}
Verwenden Sie im Skriptblock die automatische Variable $_
, um auf den zu ersetzenden Eingabetext und andere nützliche Informationen zuzugreifen. Der Klassentyp dieser Variablen ist System.Text.RegularExpressions.Match.
Im folgenden Beispiel wird jede Sequenz von drei Ziffern durch die entsprechenden Zeichen ersetzt. Der Skriptblock wird für jeden Satz von drei Ziffern ausgeführt, die ersetzt werden müssen.
"072101108108111" -replace "\d{3}", {return [char][int]$_.Value}
Hello
Einschlussoperatoren
Die Einschlussoperatoren (-contains
, -notcontains
, -in
und -notin
) ähneln den Gleichheitsoperatoren, mit der Ausnahme, dass sie immer einen booleschen Wert zurückgeben, auch wenn die Eingabe eine Auflistung ist. Diese Operatoren beenden den Vergleich, sobald sie die erste Übereinstimmung erkennen, die Gleichheitsoperatoren werten hingegen alle Eingabeelemente aus. In einer sehr großen Sammlung geben diese Operatoren Ergebnisse schneller als die Gleichheitsoperatoren zurück.
-contains und -notcontains
Syntax:
<Collection> -contains <scalar-object>
<Collection> -notcontains <scalar-object>
Diese Operatoren geben an, ob ein Satz ein bestimmtes Element enthält. -contains
gibt True zurück, wenn die rechte Seite (Skalarobjekt) mit einem der Elemente im Satz übereinstimmt. -notcontains
gibt stattdessen „False“ zurück.
Beispiele:
"abc", "def" -contains "def" # Output: True
"abc", "def" -notcontains "def" # Output: False
"Windows", "PowerShell" -contains "Shell" # Output: False
"Windows", "PowerShell" -notcontains "Shell" # Output: True
"abc", "def", "ghi" -contains "abc", "def" # Output: False
"abc", "def", "ghi" -notcontains "abc", "def" # Output: True
Komplexere Beispiele:
$DomainServers = "ContosoDC1","ContosoDC2","ContosoFileServer","ContosoDNS",
"ContosoDHCP","ContosoWSUS"
$thisComputer = "ContosoDC2"
$DomainServers -contains $thisComputer
# Output: True
Wenn der Operand auf der rechten Seite eine Auflistung ist, konvertieren diese Operatoren den Wert in die entsprechende Zeichenfolgendarstellung, bevor er mit der Auflistung auf der linken Seite verglichen wird.
$a = "abc", "def"
"abc", "def", "ghi" -contains $a # Output: False
# The following statements are equivalent
$a, "ghi" -contains $a # Output: True
"$a", "ghi" -contains $a # Output: True
"abc def", "ghi" -contains $a # Output: True
-in und -notin
Syntax:
<scalar-object> -in <Collection>
<scalar-object> -notin <Collection>
Die Operatoren -in
und -notin
wurden in PowerShell 3 als syntaktisches Gegenteil der Operatoren -contains
und -notcontains
eingeführt. -in
gibt True zurück, wenn <scalar-object>
auf der linken Seite mit einem der Elemente in der Auflistung übereinstimmt. -notin
gibt stattdessen False zurück.
Die folgenden Beispiele führen dieselbe Aktion wie die Beispiele für -contains
und -notcontains
aus, aber sie werden stattdessen mit -in
und -notin
geschrieben.
"def" -in "abc", "def" # Output: True
"def" -notin "abc", "def" # Output: False
"Shell" -in "Windows", "PowerShell" # Output: False
"Shell" -notin "Windows", "PowerShell" # Output: True
"abc", "def" -in "abc", "def", "ghi" # Output: False
"abc", "def" -notin "abc", "def", "ghi" # Output: True
Komplexere Beispiele:
$DomainServers = "ContosoDC1","ContosoDC2","ContosoFileServer","ContosoDNS",
"ContosoDHCP","ContosoWSUS"
$thisComputer = "ContosoDC2"
$thisComputer -in $DomainServers
# Output: True
Wenn der Operand auf der linken Seite eine Auflistung ist, konvertieren diese Operatoren den Wert in die entsprechende Zeichenfolgendarstellung, bevor er mit der Auflistung auf der rechten Seite verglichen wird.
$a = "abc", "def"
$a -in "abc", "def", "ghi" # Output: False
# The following statements are equivalent
$a -in $a, "ghi" # Output: True
$a -in "$a", "ghi" # Output: True
$a -in "abc def", "ghi" # Output: True
Typvergleich
Mit den Typvergleichsoperatoren (-is
und -isnot
) wird bestimmt, ob ein Objekt ein bestimmter Typ ist.
Syntax:
<object> -is <type-reference>
<object> -isnot <type-reference>
Beispiel:
$a = 1
$b = "1"
$a -is [int] # Output: True
$a -is $b.GetType() # Output: False
$b -isnot [int] # Output: True
$a -isnot $b.GetType() # Output: True