about_Operators

Korte beschrijving

Beschrijft de operators die worden ondersteund door PowerShell.

Lange beschrijving

Een operator is een taalelement dat u kunt gebruiken in een opdracht of expressie. PowerShell ondersteunt verschillende typen operators om waarden te bewerken.

Rekenkundige operators

Gebruik rekenkundige operators (+, , -, *, /, %) om waarden in een opdracht of expressie te berekenen. Met deze operators kunt u waarden toevoegen, aftrekken, vermenigvuldigen of delen en de rest (modulus) van een delingsbewerking berekenen.

Met de optellingsoperator worden elementen samenvoegt. De vermenigvuldigingsoperator retourneert het opgegeven aantal kopieën van elk element. U kunt rekenkundige operators gebruiken voor elk .NET-type dat ze implementeert, zoals: Int, , String``DateTime, Hashtableen Matrices.

Bitsgewijze operators (-band, -bor, -bxor, -bnot, -shl, , -shr) bewerken de bitpatronen in waarden.

Zie voor meer informatie about_Arithmetic_Operators.

Toewijzingsoperators

Gebruik toewijzingsoperators (=, +=, -=, *=, /=, ) %=om waarden toe te wijzen, te wijzigen of toe te wijzen aan variabelen. U kunt rekenkundige operators combineren met toewijzing om het resultaat van de rekenkundige bewerking toe te wijzen aan een variabele.

Zie voor meer informatie about_Assignment_Operators.

Vergelijkingsoperators

Gebruik vergelijkingsoperators (-eq, -ne, -gt, -lt, -le, ) -geom waarden en testvoorwaarden te vergelijken. U kunt bijvoorbeeld twee tekenreekswaarden vergelijken om te bepalen of ze gelijk zijn.

De vergelijkingsoperators bevatten ook operators die patronen in tekst zoeken of vervangen. De operators (, , ) gebruiken reguliere expressies en (-like, -notlike) gebruiken jokertekens*. -replace``-notmatch``-match

Vergelijkingsoperators voor insluiting bepalen of een testwaarde wordt weergegeven in een referentieset (-in, -notin, -contains, -notcontains).

Typevergelijkingsoperators (-is, -isnot) bepalen of een object van een bepaald type is.

Zie voor meer informatie about_Comparison_Operators.

Logische operators

Gebruik logische operators (-and, -or, -xor, -not, ) !om voorwaardelijke instructies te verbinden met één complexe voorwaarde. U kunt bijvoorbeeld een logische operator gebruiken -and om een objectfilter met twee verschillende voorwaarden te maken.

Zie voor meer informatie about_Logical_Operators.

Omleidingsoperators

Gebruik omleidingsoperators (>, >>, 2>, 2>>en 2>&1) om de uitvoer van een opdracht of expressie naar een tekstbestand te verzenden. De omleidingsoperators werken als Out-File de cmdlet (zonder parameters), maar u kunt er ook foutuitvoer mee omleiden naar opgegeven bestanden. U kunt ook de Tee-Object cmdlet gebruiken om de uitvoer om te leiden.

Zie voor meer informatie about_Redirection

Operators splitsen en lid worden

De -split operators en -join delen en combineren subtekenreeksen. De -split operator splitst een tekenreeks in subtekenreeksen. Met -join de operator worden meerdere tekenreeksen in één tekenreeks samenvoegd.

Zie voor meer informatie about_Split en about_Join.

Typeoperators

Gebruik de typeoperators (-is, -isnot, -as) om het type .NET Framework object te zoeken of te wijzigen.

Zie voor meer informatie about_Type_Operators.

Unaire operators

Gebruik de unaire operators ++ en -- om waarden te verhogen of te degraderen en - voor negatie. Als u bijvoorbeeld de variabele wilt verhogen van $a naar 10``9 , typt u $a++.

Zie voor meer informatie about_Arithmetic_Operators.

Speciale operators

Speciale operators hebben specifieke gebruiksgevallen die niet in een andere operatorgroep passen. Met speciale operators kunt u bijvoorbeeld opdrachten uitvoeren, het gegevenstype van een waarde wijzigen of elementen ophalen uit een matrix.

Groeperingsoperator ( )

Net als in andere talen dient (...) om de prioriteit van operatoren in expressies te overschrijven. Bijvoorbeeld: (1 + 2) / 3

In PowerShell zijn er echter aanvullende gedragingen.

  • (...) met kunt u de uitvoer van een opdracht laten deelnemen aan een expressie. Bijvoorbeeld:

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • Wanneer een opdracht of expressie tussen haakjes wordt gebruikt als het eerste segment van een pijplijn, leidt dat altijd tot een opsinting van het resultaat van de expressie. Als de haakjes een opdracht verpakken, wordt deze uitgevoerd tot voltooiing met alle uitvoer die in het geheugen is verzameld voordat de resultaten via de pijplijn worden verzonden.

Subexpressieoperator $( )

Retourneert het resultaat van een of meer instructies. Retourneert een scalaire waarde voor één resultaat. Retourneert een matrix voor meerdere resultaten. Gebruik dit als u een expressie binnen een andere expressie wilt gebruiken. Als u bijvoorbeeld de resultaten van de opdracht wilt insluiten in een tekenreeksexpressie.

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

Matrixsubexpressieoperator @( )

Retourneert het resultaat van een of meer instructies als een matrix. Het resultaat is altijd een matrix van 0 of meer objecten.

PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
0

Letterlijke syntaxis van hashtabel @{}

Net als bij de matrixsubexpressie wordt deze syntaxis gebruikt om een hash-tabel te declaren. Zie voor meer informatie about_Hash_Tables.

Operator voor aanroepen &

Voert een opdracht- of scriptblok uit. Met de aanroepoperator, ook wel de aanroepoperator genoemd, kunt u opdrachten uitvoeren die zijn opgeslagen in variabelen en worden vertegenwoordigd door tekenreeksen of scriptblokken. De aanroepoperator wordt uitgevoerd in een onderliggend bereik. Zie voor meer informatie over about_Scopes.

In dit voorbeeld slaat u een opdracht op in een tekenreeks en voert u deze uit met behulp van de aanroepoperator.

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

De aanroepoperator parseert geen tekenreeksen. Dit betekent dat u geen opdrachtparameters binnen een tekenreeks kunt gebruiken wanneer u de aanroepoperator gebruikt.

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.

De cmdlet Invoke-Expression kan code uitvoeren die parseringsfouten veroorzaakt bij het gebruik van de aanroepoperator.

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

U kunt de aanroepoperator gebruiken om scripts uit te voeren met hun bestandsnamen. In het onderstaande voorbeeld ziet u een scriptbestandsnaam die spaties bevat. Wanneer u het script probeert uit te voeren, geeft PowerShell in plaats daarvan de inhoud weer van de tekenreeks met de bestandsnaam. Met de aanroepoperator kunt u de inhoud van de tekenreeks met de bestandsnaam uitvoeren.

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!

Zie voor meer informatie over scriptblokken about_Script_Blocks.

Achtergrondoperator &

Voert de pijplijn vóór deze op de achtergrond uit in een PowerShell-taak. Deze operator fungeert op dezelfde manier als de UNIX-besturingselementoperator ampersand (&), waarmee de opdracht vóór deze asynchroon in subshell als een taak wordt uitgevoerd.

Deze operator is functioneel equivalent aan Start-Job. Standaard start de achtergrondoperator de taken in de huidige werkmap van de aanroeper die de parallelle taken heeft gestart. In het volgende voorbeeld wordt het basisgebruik van de operator voor achtergrondfuncties gedemonstreerd.

Get-Process -Name pwsh &

Deze opdracht is functioneel equivalent aan het volgende gebruik van Start-Job:

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

Net als Start-Job, retourneert & de achtergrondoperator een Job -object. Dit object kan worden gebruikt met Receive-Job en Remove-Job, alsof u hebt gebruikt om Start-Job de taak te starten.

$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

De & achtergrondoperator is ook een eindafding voor de instructie, net als de UNIX van de besturingselementoperator en (&). Hiermee kunt u aanvullende opdrachten aanroepen na de & achtergrondoperator. In het volgende voorbeeld wordt het aanroepen van aanvullende opdrachten na de achtergrondoperator & gedemonstreerd.

$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

Dit is gelijk aan het volgende script:

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

Als u meerdere opdrachten wilt uitvoeren, elk in hun eigen achtergrondproces, maar allemaal op één regel, & plaats dan tussen en na elk van de opdrachten.

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

Zie Voor meer informatie over PowerShell-taken about_Jobs.

Cast-operator [ ]

Converteert of beperkt objecten naar het opgegeven type. Als de objecten niet kunnen worden geconverteerd, genereert PowerShell een fout.

[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'

Een cast-cast kan ook worden uitgevoerd wanneer een variabele wordt toegewezen aan met behulp van cast-notatie.

Komma-operator ,

Als binaire operator maakt de komma een matrix of wordt deze aan de matrix die wordt gemaakt, aan de matrix die wordt gemaakt. In de expressiemodus maakt de komma als unaire operator een matrix met slechts één lid. Plaats de komma vóór het lid.

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

Omdat Write-Object een argument verwacht, moet u de expressie tussen haakjes zetten.

Operator voor puntsourcing .

Voert een script uit in het huidige bereik, zodat alle functies, aliassen en variabelen die door het script worden gemaakt, worden toegevoegd aan het huidige bereik, waardoor bestaande functies, aliassen en variabelen worden overschrijven. Parameters die door het script worden gedeclareerd, worden variabelen. Parameters waarvoor geen waarde is opgegeven, worden variabelen zonder waarde. De automatische variabele blijft echter $args behouden.

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

Notitie

De operator voor puntsourcing wordt gevolgd door een spatie. Gebruik de spatie om de punt te onderscheiden van het puntsymbool (.) dat de huidige map vertegenwoordigt.

In het volgende voorbeeld wordt Sample.ps1 script in de huidige map uitgevoerd in het huidige bereik.

. .\sample.ps1

Operator formatteer -f

Maakt tekenreeksen op met behulp van de indelingsmethode van tekenreeksobjecten. Voer de notatiereeks in aan de linkerkant van de operator en de objecten die aan de rechterkant van de operator moeten worden opgemaakt.

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

Als u de accolades ({}) in de opgemaakte tekenreeks wilt houden, kunt u deze escapen door de accolades te verdubbelen.

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

Zie de methode String.Format en Samengestelde opmaak voor meer informatie.

Indexoperator [ ]

Selecteert objecten uit geïndexeerde verzamelingen, zoals matrices en hashtabellen. Matrixindexen zijn op nul gebaseerd, dus het eerste object wordt geïndexeerd als [0]. U kunt ook negatieve indexen gebruiken om de laatste waarden op te halen. Hashtabellen worden geïndexeerd op sleutelwaarde.

Op een lijst met indexen retourneert de indexoperator een lijst met leden die overeenkomen met die indexen.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(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...

Wanneer een object geen geïndexeerde verzameling is, retourneert de indexoperator voor toegang tot het eerste element het object zelf. Indexwaarden boven het eerste element retourneren $null.

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

Pijplijnoperator |

Verzendt ('pipes') de uitvoer van de opdracht die eraan voorafgaat aan de opdracht die erop volgt. Wanneer de uitvoer meer dan één object (een 'verzameling') bevat, verzendt de pijplijnoperator de objecten één voor één.

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

Pijplijnketenoperators && en ||

Voer de pijplijn aan de rechterkant voorwaardelijk uit op basis van het succes van de pijplijn aan de linkerkant.

# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
npm install || Remove-Item -Recurse ./node_modules

Zie voor meer informatie About_Pipeline_Chain_Operators.

Bereikoperator ..

Vertegenwoordigt de sequentiële gehele getallen in een matrix met gehele getallen op een boven- en ondergrens.

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

U kunt ook in omgekeerde volgorde reeksen maken.

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

Vanaf PowerShell 6 werkt de bereikoperator met tekens en gehele getallen.

Als u een bereik van tekens wilt maken, sluit u de grenstekens tussen aanhalingstekens.

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

Operator voor lidtoegang .

Heeft toegang tot de eigenschappen en methoden van een object. De lidnaam kan een expressie zijn.

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

Als u PowerShell 3.0 start en u de operator gebruikt voor een lijstverzamelingsobject dat niet het lid heeft, worden de items in die verzameling automatisch door PowerShell samengevat en wordt de operator voor elk ervan gebruikt. Zie voor meer informatie about_Member-Access_Enumeration.

Statische lidoperator ::

Roept de statische eigenschappen en methoden van een .NET Framework klasse aan. Gebruik de statische parameter Get-Member van de cmdlet om de statische eigenschappen en methoden van een object te vinden. De lidnaam kan een expressie zijn.

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

Ternaire operator ? <if-true> : <if-false>

U kunt de ternaire operator gebruiken als vervanging voor de if-else instructie in eenvoudige voorwaardelijke gevallen.

Zie voor meer informatie about_If.

Operator voor null-sameneten ??

De operator null-coalescing ?? retourneert de waarde van de linkerope operand als deze niet null is. Anders wordt de rechterope operand geëvalueerd en wordt het resultaat ervan retourneert. De ?? operator evalueert de rechterope operand niet als de linkeropeen is geëvalueerd als niet-null.

$x = $null
$x ?? 100
100

In het volgende voorbeeld wordt de rechterope operand niet geëvalueerd.

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Toewijzingsoperator voor null-sameneten ??=

De toewijzingsoperator null-coalescing ??= wijst de waarde van de rechteropend alleen toe aan de linkerope operand als de operand aan de linkerkant als null wordt geëvalueerd. De ??= operator evalueert de rechterope operand niet als de linkeropeen is geëvalueerd als niet-null.

$x = $null
$x ??= 100
$x
100

In het volgende voorbeeld wordt de rechterope operand niet geëvalueerd.

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Null-voorwaardelijke operators ?. en ?[]

Notitie

Deze functie is verplaatst van experimenteel naar standaard in PowerShell 7.1.

Een null-voorwaardelijke operator past een bewerking voor lidtoegang, ?., of elementtoegang, ?[]alleen toe op de operand als die operand als niet-null wordt geëvalueerd; anders wordt null geretourneerd.

Omdat PowerShell deel mag ? uitmaken van de naam van de variabele, is een formele specificatie van de naam van de variabele vereist voor het gebruik van deze operators. Het is dus vereist om te gebruiken {} rond de namen van variabelen, zoals ${a} of wanneer ? deel uitmaakt van de variabelenaam ${a?}.

In het volgende voorbeeld wordt de waarde van PropName geretourneerd.

$a = @{ PropName = 100 }
${a}?.PropName
100

In het volgende voorbeeld wordt null geretourneerd, zonder toegang te krijgen tot de lidnaam PropName.

$a = $null
${a}?.PropName

Op dezelfde manier wordt de waarde van het element geretourneerd.

$a = 1..10
${a}?[0]
1

En wanneer de operand null is, wordt het element niet toegankelijk en wordt null geretourneerd.

$a = $null
${a}?[0]

Notitie

Omdat PowerShell deel mag ? uitmaken van de naam van de variabele, is een formele specificatie van de naam van de variabele vereist voor het gebruik van deze operators. Het is dus vereist om te gebruiken {} rond de namen van variabelen, zoals ${a} of wanneer ? deel uitmaakt van de variabelenaam ${a?}.

De syntaxis van de variabelenaam ${<name>} mag niet worden verward met de $() subexpressieoperator. Zie de sectie Variabelenaam van de about_Variables.

Zie ook