Share via


Om operatorer

Kort beskrivning

Beskriver de operatorer som stöds av PowerShell.

Lång beskrivning

En operator är ett språkelement som du kan använda i ett kommando eller uttryck. PowerShell har stöd för flera typer av operatorer som hjälper dig att ändra värden.

Aritmetiska operatorer

Använd aritmetiska operatorer (+, , -*, /, %) för att beräkna värden i ett kommando eller uttryck. Med dessa operatorer kan du lägga till, subtrahera, multiplicera eller dividera värden och beräkna resten (modulus) av en divisionsåtgärd.

Additionsoperatorn sammanfogar element. Multiplikationsoperatorn returnerar det angivna antalet kopior av varje element. Du kan använda aritmetiska operatorer på valfri .NET-typ som implementerar dem, till exempel: Int, String, DateTime, Hashtableoch matriser.

Bitvisoperatorer (-band, -bor, -bxor, -bnot, -shl, -shr) ändrar bitmönstren i värden.

Mer information finns i about_Arithmetic_Operators.

Tilldelningsoperatorer

Använd tilldelningsoperatorer (=, +=, -=, *=, /=, %=) för att tilldela, ändra eller lägga till värden i variabler. Du kan kombinera aritmetiska operatorer med tilldelning för att tilldela resultatet av den aritmetiska åtgärden till en variabel.

Mer information finns i about_Assignment_Operators.

Jämförelseoperatorer

Använd jämförelseoperatorer (-eq, , -ne-gt, -lt, -le, -ge) för att jämföra värden och testvillkor. Du kan till exempel jämföra två strängvärden för att avgöra om de är lika.

Jämförelseoperatorerna innehåller även operatorer som hittar eller ersätter mönster i text. Operatorerna (, , ) använder reguljära uttryck och (-like, -notlike) använder jokertecken *. -replace-notmatch-match

Operatorer för inneslutningsjämförelse avgör om ett testvärde visas i en referensuppsättning (-in, -notin, -contains, -notcontains).

Typjämförelseoperatorer (-is, -isnot) avgör om ett objekt är av en viss typ.

Mer information finns i about_Comparison_Operators.

Logiska operatorer

Använd logiska operatorer (-and, -or, -xor, -not, !) för att ansluta villkorsstyrda instruktioner till ett enda komplext villkor. Du kan till exempel använda en logisk -and operator för att skapa ett objektfilter med två olika villkor.

Mer information finns i about_Logical_Operators.

Omdirigeringsoperatorer

Använd omdirigeringsoperatorer (>, >>, 2>, 2>>och 2>&1) för att skicka utdata från ett kommando eller uttryck till en textfil. Omdirigeringsoperatorerna fungerar som cmdleten Out-File (utan parametrar) men du kan också omdirigera felutdata till angivna filer. Du kan också använda cmdleten Tee-Object för att omdirigera utdata.

Mer information finns i about_Redirection

Dela upp och koppla operatorer

Operatorerna -split och -join delar upp och kombinerar delsträngar. Operatorn -split delar upp en sträng i delsträngar. Operatorn -join sammanfogar flera strängar till en enda sträng.

Mer information finns i about_Split och about_Join.

Typoperatorer

Använd typoperatorerna (-is, -isnot, -as) för att hitta eller ändra .NET Framework typ av objekt.

Mer information finns i about_Type_Operators.

Unary Operatorer

Använd unary-operatorer för att öka eller minska variabler eller objektegenskaper och för att ange heltal till positiva eller negativa tal. Om du till exempel vill öka variabeln $a från 9 till 10skriver $a++du .

Särskilda operatorer

Särskilda operatörer har specifika användningsfall som inte passar in i någon annan operatörsgrupp. Med särskilda operatorer kan du till exempel köra kommandon, ändra ett värdes datatyp eller hämta element från en matris.

Grupperingsoperator ( )

Precis som i andra språk (...) åsidosätter operatorprioritet i uttryck. Exempelvis: (1 + 2) / 3

I PowerShell finns det dock ytterligare beteenden.

  • (...) gör att du kan låta utdata från ett kommando delta i ett uttryck. Exempel:

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • När det används som det första segmentet i en pipeline leder omslutning av ett kommando eller uttryck inom parentes alltid till att uttrycksresultatet räknas upp. Om parenteserna omsluter ett kommando körs det för att slutföras med alla utdata som samlas in i minnet innan resultaten skickas via pipelinen.

Anteckning

Omsluter ett kommando i parenteser gör att den automatiska variabeln $? anges till $true, även när själva det omslutna kommandot är inställt $?$false. Till exempel (Get-Item /Nosuch); $? ger oväntat Sant. Mer information om $?finns i about_Automatic_Variables.

Underuttrycksoperator $( )

Returnerar resultatet av en eller flera instruktioner. För ett enda resultat returnerar en skalär. Returnerar en matris för flera resultat. Använd detta när du vill använda ett uttryck i ett annat uttryck. Om du till exempel vill bädda in resultatet av kommandot i ett stränguttryck.

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

Matrisunderuttrycksoperator @( )

Returnerar resultatet av en eller flera instruktioner som en matris. Om det bara finns ett objekt har matrisen bara en medlem.

@(Get-CimInstance win32_logicalDisk)

Literalsyntax för hashtabell @{}

Precis som matrisunderuttryck används den här syntaxen för att deklarera en hash-tabell. Mer information finns i about_Hash_Tables.

Samtalsoperator &

Kör ett kommando-, skript- eller skriptblock. Med anropsoperatorn, även kallad "anropsoperator", kan du köra kommandon som lagras i variabler och representeras av strängar eller skriptblock. Anropsoperatorn körs i ett underordnat omfång. Mer information om omfång finns i about_Scopes.

Det här exemplet lagrar ett kommando i en sträng och kör det med hjälp av anropsoperatorn.

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

Anropsoperatorn parsar inte strängar. Det innebär att du inte kan använda kommandoparametrar i en sträng när du använder anropsoperatorn.

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

Cmdleten Invoke-Expression kan köra kod som orsakar parsningsfel när anropsoperatorn används.

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

Du kan använda anropsoperatorn för att köra skript med hjälp av deras filnamn. I exemplet nedan visas ett skriptfilnamn som innehåller blanksteg. När du försöker köra skriptet visar PowerShell i stället innehållet i den citerade strängen som innehåller filnamnet. Med anropsoperatorn kan du köra innehållet i strängen som innehåller filnamnet.

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!

Mer information om skriptblock finns i about_Script_Blocks.

Bakgrundsoperator &

Kör pipelinen före den i bakgrunden, i ett PowerShell-jobb. Den här operatorn fungerar på samma sätt som UNIX-kontrolloperatorn etand (&), som kör kommandot innan det asynkront i underskal som ett jobb.

Den här operatorn är funktionellt likvärdig med Start-Job. I följande exempel visas grundläggande användning av bakgrundsjobboperatorn.

Get-Process -Name pwsh &

Det kommandot är funktionellt likvärdigt med följande användning av Start-Job:

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

Precis som Start-Jobreturnerar bakgrundsoperatorn & ett Job objekt. Det här objektet kan användas med Receive-Job och Remove-Job, precis som om du hade använt Start-Job för att starta jobbet.

$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

Bakgrundsoperatorn & är också en instruktionsavslutare, precis som UNIX-kontrolloperatorns etand (&). På så sätt kan du anropa ytterligare kommandon efter & bakgrundsoperatorn. I följande exempel visas anropet av ytterligare kommandon efter & bakgrundsoperatorn.

$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

Detta motsvarar följande skript:

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

Om du vill köra flera kommandon, var och en i sin egen bakgrundsprocess men alla på en rad, placerar & du helt enkelt mellan och efter vart och ett av kommandona.

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

Mer information om PowerShell-jobb finns i about_Jobs.

Gjutningsoperator [ ]

Konverterar eller begränsar objekt till den angivna typen. Om objekten inte kan konverteras genererar PowerShell ett fel.

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

En gjutning kan också utföras när en variabel tilldelas till att använda gjuten notation.

Kommaoperator ,

Som binär operator skapar kommatecknet en matris eller tillägg till matrisen som skapas. I uttrycksläge, som en enställig operator, skapar kommatecknet en matris med bara en medlem. Placera kommatecknet före medlemmen.

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

Eftersom Write-Object förväntar sig ett argument måste du placera uttrycket inom parentes.

Punktkällaoperator .

Kör ett skript i det aktuella omfånget så att alla funktioner, alias och variabler som skriptet skapar läggs till i det aktuella omfånget, vilket åsidosätter befintliga. Parametrar som deklareras av skriptet blir variabler. Parametrar för vilka inget värde har angetts blir variabler utan värde. Den automatiska variabeln $args bevaras dock.

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

Anteckning

Punktkällornas operator följs av ett blanksteg. Använd blanksteget för att skilja punkten från punktsymbolen (.) som representerar den aktuella katalogen.

I följande exempel körs det Sample.ps1 skriptet i den aktuella katalogen i det aktuella omfånget.

. .\sample.ps1

Formatoperator -f

Formaterar strängar med hjälp av formatmetoden för strängobjekt. Ange formatsträngen till vänster om operatorn och de objekt som ska formateras till höger om operatorn.

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

Om du behöver behålla klammerparenteserna ({}) i den formaterade strängen kan du undvika dem genom att fördubbla klammerparenteserna.

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

Mer information finns i string.format-metoden och sammansatt formatering.

Indexoperator [ ]

Markerar objekt från indexerade samlingar, till exempel matriser och hash-tabeller. Matrisindex är nollbaserade, så det första objektet indexeras som [0]. För matriser (endast) kan du också använda negativa index för att hämta de sista värdena. Hash-tabeller indexeras efter nyckelvärde.

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 |

Skickar ("pipes") utdata från kommandot som föregår det till kommandot som följer det. När utdata innehåller fler än ett objekt (en "samling" skickar pipelineoperatorn objekten ett i taget.

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

Intervalloperator ..

Representerar sekventiella heltal i en heltalsmatris, givet en övre och nedre gräns.

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

Du kan också skapa intervall i omvänd ordning.

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

Från och med PowerShell 6 fungerar intervalloperatorn med både tecken och heltal.

Om du vill skapa ett intervall med tecken omger du gränstecken med citattecken.

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

Medlemsåtkomstoperator .

Öppnar egenskaperna och metoderna för ett objekt. Medlemsnamnet kan vara ett uttryck.

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

Statisk medlemsoperator ::

Anropar statiska egenskaper och metoder för en .NET Framework-klass. Om du vill hitta statiska egenskaper och metoder för ett objekt använder du parametern Static för cmdleten Get-Member . Medlemsnamnet kan vara ett uttryck.

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

Se även

about_Arithmetic_Operators

about_Assignment_Operators

about_Comparison_Operators

about_Logical_Operators

about_Operator_Precedence

about_Type_Operators

about_Split

about_Join

about_Redirection