Freigeben über


Informationen zu Operatoren

Kurze Beschreibung

Beschreibt die Operatoren, die von PowerShell unterstützt werden.

Lange Beschreibung

Ein Operator ist ein Sprachelement, das Sie in einem Befehl oder Ausdruck verwenden können. PowerShell unterstützt verschiedene Arten von Operatoren, um Werte zu bearbeiten.

Arithmetische Operatoren

Verwenden Sie arithmetische Operatoren (+, , -*, /, ), %um Werte in einem Befehl oder Ausdruck zu berechnen. Mit diesen Operatoren können Sie Werte hinzufügen, subtrahieren, multiplizieren oder dividieren und den Rest (Modulus) eines Divisionsvorgangs berechnen.

Der Additionsoperator verkettet Elemente. Der Multiplikationsoperator gibt die angegebene Anzahl von Kopien jedes Elements zurück. Sie können arithmetische Operatoren für jeden .NET-Typ verwenden, der sie implementiert, z. B.: Int, , String, DateTime, Hashtableund Arrays.

Bitweise Operatoren (-band, , -bor-bxor, -bnot, -shl, ) -shrbearbeiten die Bitmuster in Werten.

Weitere Informationen finden Sie unter about_Arithmetic_Operators.

Zuweisungsoperatoren

Verwenden Sie Zuweisungsoperatoren (=, , +=-=, *=/=, , ), %=zum Zuweisen, Ändern oder Anfügen von Werten zu Variablen. Sie können arithmetische Operatoren mit einer Zuweisung kombinieren, um das Ergebnis des arithmetischen Vorgangs einer Variablen zuzuweisen.

Weitere Informationen finden Sie unter about_Assignment_Operators.

Vergleichsoperatoren

Verwenden Sie Vergleichsoperatoren (-eq, , -ne-gt, -lt, -le, ), -geum Werte und Testbedingungen zu vergleichen. Sie können beispielsweise zwei Zeichenfolgenwerte vergleichen, um zu bestimmen, ob sie gleich sind.

Die Vergleichsoperatoren enthalten auch Operatoren, die Muster in Text finden oder ersetzen. Die Operatoren (, , ) verwenden reguläre Ausdrücke, und (-like, -notlike) verwenden Feldhalter*. -replace-notmatch-match

Containmentvergleichsoperatoren bestimmen, ob ein Testwert in einem Verweissatz (-in, , -notin-contains, -notcontains) angezeigt wird.

Typvergleichsoperatoren (-is, ) bestimmen, -isnotob ein Objekt von einem bestimmten Typ ist.

Weitere Informationen finden Sie unter about_Comparison_Operators.

Logische Operatoren

Verwenden Sie logische Operatoren (-and, , -or-xor, -not, ), !um bedingte Anweisungen mit einer einzelnen komplexen Bedingung zu verbinden. Sie können beispielsweise einen logischen -and Operator verwenden, um einen Objektfilter mit zwei verschiedenen Bedingungen zu erstellen.

Weitere Informationen finden Sie unter about_Logical_Operators.

Umleitungsoperatoren

Verwenden Sie Umleitungsoperatoren (>, , >>2>, 2>>und 2>&1), um die Ausgabe eines Befehls oder Ausdrucks an eine Textdatei zu senden. Die Umleitungsoperatoren funktionieren wie das Out-File Cmdlet (ohne Parameter), können aber auch die Fehlerausgabe an angegebene Dateien umleiten. Sie können das Cmdlet auch verwenden, um die Tee-Object Ausgabe umzuleiten.

Weitere Informationen finden Sie unter about_Redirection

Teilungs- und Joinoperatoren

Die -split Operatoren und -join teilen und kombinieren Teilzeichenfolgen. Der -split Operator teilt eine Zeichenfolge in Teilzeichenfolgen auf. Der -join Operator verkettet mehrere Zeichenfolgen zu einer einzelnen Zeichenfolge.

Weitere Informationen finden Sie unter about_Split und about_Join.

Typoperatoren

Verwenden Sie die Typoperatoren (-is, -isnot, -as), um den .NET Framework Typ eines Objekts zu suchen oder zu ändern.

Weitere Informationen finden Sie unter about_Type_Operators.

Unäre Operatoren

Verwenden Sie unäre Operatoren, um Variablen oder Objekteigenschaften zu erhöhen oder zu dekrementieren und ganze Zahlen auf positive oder negative Zahlen festzulegen. Wenn Sie beispielsweise die Variable $a von 9 inkrementieren möchten, 10geben Sie ein $a++.

Spezialoperatoren

Spezielle Operatoren verfügen über spezifische Anwendungsfälle, die in keine andere Operatorgruppe passen. Mit speziellen Operatoren können Sie beispielsweise Befehle ausführen, den Datentyp eines Werts ändern oder Elemente aus einem Array abrufen.

Gruppierungsoperator ( )

Wie in anderen Sprachen, dient dazu, (...) die Operatorrangfolge in Ausdrücken außer Kraft zu setzen. Beispiel: (1 + 2) / 3

In PowerShell gibt es jedoch zusätzliche Verhaltensweisen.

  • (...) ermöglicht es Ihnen, die Ausgabe eines Befehls an einem Ausdruck teilnehmen zu lassen. Beispiel:

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • Wenn sie als erstes Segment einer Pipeline verwendet wird, führt das Umschließen eines Befehls oder Ausdrucks in Klammern ausnahmslos zur Enumeration des Ausdrucksergebnisses. Wenn die Klammern einen Befehl umschließen, wird er bis zum Abschluss ausgeführt, wobei die gesamte Ausgabe im Arbeitsspeicher gesammelt wird , bevor die Ergebnisse durch die Pipeline gesendet werden.

Hinweis

Das Umschließen eines Befehls in Klammern bewirkt, dass die automatische Variable $? auf $truefestgelegt wird, auch wenn der eingeschlossene Befehl selbst auf $falsefestgelegt $? ist. Beispielsweise (Get-Item /Nosuch); $? ergibt unerwartet True. Weitere Informationen zu $?finden Sie unter about_Automatic_Variables.

Subexpression-Operator $( )

Gibt das Ergebnis einer oder mehrerer Anweisungen zurück. Gibt für ein einzelnes Ergebnis einen Skalar zurück. Gibt für mehrere Ergebnisse ein Array zurück. Verwenden Sie dies, wenn Sie einen Ausdruck in einem anderen Ausdruck verwenden möchten. Beispielsweise, um die Befehlsergebnisse in einen Zeichenfolgenausdruck einzubetten.

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

Array-Subexpression-Operator @( )

Gibt das Ergebnis einer oder mehrerer Anweisungen als Array zurück. Wenn nur ein Element vorhanden ist, hat das Array nur ein Element.

@(Get-CimInstance win32_logicalDisk)

Syntax des Hashtabellenliterals @{}

Ähnlich wie beim Array-Teilausdruck wird diese Syntax verwendet, um eine Hashtabelle zu deklarieren. Weitere Informationen finden Sie unter about_Hash_Tables.

Anrufoperator &

Führt einen Befehl, ein Skript oder einen Skriptblock aus. Mit dem Aufrufoperator, der auch als "Aufrufoperator" bezeichnet wird, können Sie Befehle ausführen, die in Variablen gespeichert und durch Zeichenfolgen oder Skriptblöcke dargestellt werden. Der Aufrufoperator wird in einem untergeordneten Bereich ausgeführt. Weitere Informationen zu Bereichen finden Sie unter about_Scopes.

In diesem Beispiel wird ein Befehl in einer Zeichenfolge gespeichert und mithilfe des Aufrufoperators ausgeführt.

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

Der Aufrufoperator analysiert keine Zeichenfolgen. Dies bedeutet, dass Sie keine Befehlsparameter innerhalb einer Zeichenfolge verwenden können, wenn Sie den Aufrufoperator verwenden.

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.
At line:1 char:2
+ & $c
+  ~~
    + CategoryInfo          : ObjectNotFound: (Get-Service -Name Spooler:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Das Cmdlet Invoke-Expression kann Code ausführen, der bei Verwendung des Aufrufoperators Analysefehler verursacht.

PS> & "1+1"
& : The term '1+1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

Sie können den Aufrufoperator verwenden, um Skripts mit ihren Dateinamen auszuführen. Das folgende Beispiel zeigt einen Skriptdateinamen, der Leerzeichen enthält. Wenn Sie versuchen, das Skript auszuführen, zeigt PowerShell stattdessen den Inhalt der Zeichenfolge an, die den Dateinamen enthält. Mit dem Aufrufoperator können Sie den Inhalt der Zeichenfolge ausführen, die den Dateinamen enthält.

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

Weitere Informationen zu Skriptblöcken finden Sie unter about_Script_Blocks.

Hintergrundoperator &

Führt die Pipeline im Hintergrund in einem PowerShell-Auftrag aus. Dieser Operator verhält sich ähnlich wie der UNIX-Steuerelementoperator ampersand (&), der den Befehl vor dem Befehl asynchron in der Untershell als Auftrag ausführt.

Dieser Operator ist funktionell gleichbedeutend mit Start-Job. Im folgenden Beispiel wird die grundlegende Verwendung des Hintergrundauftragsoperators veranschaulicht.

Get-Process -Name pwsh &

Dieser Befehl entspricht funktional der folgenden Verwendung von Start-Job:

Start-Job -ScriptBlock {Get-Process -Name pwsh}

Genau wie Start-Jobgibt der & Hintergrundoperator ein Job -Objekt zurück. Dieses Objekt kann mit Receive-Job und Remove-Jobverwendet werden, so als hätten Start-Job Sie den Auftrag gestartet.

$job = Get-Process -Name pwsh &
Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Remove-Job $job

Der & Hintergrundoperator ist ebenso ein Anweisungsabschlussator, genau wie der UNIX-Steuerelementoperator ampersand (&). Dadurch können Sie zusätzliche Befehle nach dem & Hintergrundoperator aufrufen. Im folgenden Beispiel wird der Aufruf zusätzlicher Befehle nach dem & Hintergrundoperator veranschaulicht.

$job = Get-Process -Name pwsh & Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Dies entspricht dem folgenden Skript:

$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait

Wenn Sie mehrere Befehle ausführen möchten, jeder in einem eigenen Hintergrundprozess, aber alle in einer Zeile, platzieren & Sie einfach zwischen und nach jedem der Befehle.

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &

Weitere Informationen zu PowerShell-Aufträgen finden Sie unter about_Jobs.

Umwandlungsoperator [ ]

Konvertiert Oder schränkt Objekte in den angegebenen Typ ein. Wenn die Objekte nicht konvertiert werden können, generiert PowerShell einen Fehler.

[DateTime]"2/20/88" - [DateTime]"1/20/88"
[Int] (7/2)
[String] 1 + 0
[Int] '1' + 0

Eine Umwandlung kann auch ausgeführt werden, wenn eine Variable mithilfe der Umwandlungsnotation zugewiesen wird.

Kommaoperator ,

Als binärer Operator erstellt das Komma ein Array oder fügt an das zu erstellende Array an. Im Ausdrucksmodus erstellt das Komma als unärer Operator ein Array mit nur einem Element. Platzieren Sie das Komma vor dem Element.

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Da Write-Object ein Argument erwartet wird, müssen Sie den Ausdruck in Klammern einfügen.

Dot-Sourcing-Operator .

Führt ein Skript im aktuellen Bereich aus, sodass alle Funktionen, Aliase und Variablen, die das Skript erstellt, dem aktuellen Bereich hinzugefügt werden und vorhandene überschrieben werden. Vom Skript deklarierte Parameter werden zu Variablen. Parameter, für die kein Wert angegeben wurde, werden zu Variablen ohne Wert. Die automatische Variable $args wird jedoch beibehalten.

. c:\scripts\sample.ps1 1 2 -Also:3

Hinweis

Auf den Punktbeschaffungsoperator folgt ein Leerzeichen. Verwenden Sie den Leerraum, um den Punkt vom Punktsymbol (.) zu unterscheiden, das das aktuelle Verzeichnis darstellt.

Im folgenden Beispiel wird das Sample.ps1 Skript im aktuellen Verzeichnis im aktuellen Bereich ausgeführt.

. .\sample.ps1

Formatoperator -f

Formatiert Zeichenfolgen mithilfe der Formatmethode von Zeichenfolgenobjekten. Geben Sie die Formatzeichenfolge auf der linken Seite des Operators und die Objekte ein, die auf der rechten Seite des Operators formatiert werden sollen.

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

Wenn Sie die geschweiften Klammern ({}) in der formatierten Zeichenfolge beibehalten müssen, können Sie sie mit escapen, indem Sie die geschweiften Klammern verdoppeln.

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

Weitere Informationen finden Sie unter String.Format-Methode und Zusammengesetzte Formatierung.

Indexoperator [ ]

Wählt Objekte aus indizierten Sammlungen aus, z. B. Arrays und Hashtabellen. Arrayindizes sind nullbasiert, sodass das erste Objekt als [0]indiziert wird. Für Arrays (nur) können Sie auch negative Indizes verwenden, um die letzten Werte abzurufen. Hashtabellen werden anhand des Schlüsselwerts indiziert.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

Pipelineoperator |

Sendet ("Pipes") die Ausgabe des Befehls, der ihm vorangeht, an den Befehl, der ihm folgt. Wenn die Ausgabe mehr als ein Objekt (eine "Auflistung") enthält, sendet der Pipelineoperator die Objekte nacheinander.

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

Bereichsoperator ..

Stellt die sequenziellen ganzen Zahlen in einem Ganzzahlarray dar, wobei eine obere und eine untere Grenze angegeben ist.

1..10
foreach ($a in 1..$max) {Write-Host $a}

Sie können Bereiche auch in umgekehrter Reihenfolge erstellen.

10..1
5..-5 | ForEach-Object {Write-Output $_}

Ab PowerShell 6 arbeitet der Bereichsoperator sowohl mit Zeichen als auch mit Ganzzahlen.

Um einen Bereich von Zeichen zu erstellen, schließen Sie die Begrenzungszeichen in Anführungszeichen ein.

PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A

Memberzugriffsoperator .

Greift auf die Eigenschaften und Methoden eines Objekts zu. Der Membername kann ein Ausdruck sein.

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

Statischer Memberoperator ::

Ruft die statischen Eigenschaften und Methoden einer .NET Framework-Klasse auf. Verwenden Sie den Static-Parameter des Get-Member Cmdlets, um die statischen Eigenschaften und Methoden eines Objekts zu finden. Der Membername kann ein Ausdruck sein.

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

Weitere Informationen

about_Arithmetic_Operators

about_Assignment_Operators

about_Comparison_Operators

about_Logical_Operators

about_Operator_Precedence

about_Type_Operators

about_Split

about_Join

about_Redirection