Dela via


Om parsning

KORT BESKRIVNING

Beskriver hur PowerShell parsar kommandon.

LÅNG BESKRIVNING

När du anger ett kommando i kommandotolken delar PowerShell upp kommandotexten i en serie segment som kallas "tokens" och bestämmer sedan hur varje "token" ska tolkas.

Om du till exempel skriver:

Write-Host bok

PowerShell delar upp följande kommando i två tokens, "Write-Host" och "book", och tolkar varje token oberoende av varandra.

När du bearbetar ett kommando körs PowerShell-parsern i uttrycksläge eller i argumentläge:

  • I uttrycksläge måste teckensträngsvärdena finnas inom citattecken. Tal som inte omges av citattecken behandlas som numeriska värden (i stället för som en serie tecken).

  • I argumentläge behandlas varje värde som en expanderbar sträng om det inte börjar med något av följande specialtecken: dollartecken ($), vid tecknet (@), enkelt citattecken (),dubbla citattecken () eller en inledande parentes (().

Om det föregås av något av dessa tecken behandlas värdet som ett värdeuttryck.

Följande tabell innehåller flera exempel på kommandon som bearbetas i uttrycksläge och argumentläge och de resultat som genereras av dessa kommandon.

Exempel Läge Resultat
2+2 Uttryck 4 (heltal)
Write-Output 2+2 Argument "2+2" (sträng)
Write-Output (2+2) Uttryck 4 (heltal)
$a = 2+2 Uttryck $a = 4 (heltal)
Write-Output $a Uttryck 4 (heltal)
Write-Output $a/H Argument "4/H" (sträng)

Varje token kan tolkas som någon typ av objekttyp, till exempel boolesk eller sträng. PowerShell försöker fastställa objekttypen från uttrycket. Objekttypen beror på vilken typ av parameter ett kommando förväntar sig och om PowerShell vet hur argumentet ska konverteras till rätt typ. I följande tabell visas flera exempel på de typer som tilldelats värden som returneras av uttrycken.

Exempel Läge Resultat
Write-Output !1 -argument "!1" (sträng)
Write-Output (!1) uttryck Falskt (booleskt)
Write-Output (2) uttryck 2 (heltal)

Stoppparsningssymbolen (--%), som introducerades i PowerShell 3.0, uppmanar PowerShell att avstå från att tolka indata som PowerShell-kommandon eller -uttryck.

När du anropar ett körbart program i PowerShell placerar du stoppparsningssymbolen före programargumenten. Den här tekniken är mycket enklare än att använda escape-tecken för att förhindra feltolkning.

När den stöter på en stoppparsningssymbol behandlar PowerShell de återstående tecknen på raden som en literal. Den enda tolkning som utförs är att ersätta värden för miljövariabler som använder Windows-standardnotation, till exempel %USERPROFILE%.

Stoppparsningssymbolen gäller endast fram till nästa nyrads- eller pipelinetecken. Du kan inte använda ett fortsättningstecken (') för att utöka dess effekt eller använda en kommandogränsare (;) för att avsluta dess effekt.

Följande kommando anropar till exempel Icacls-programmet.

icacls X:\VMS /grant Dom\HVAdmin:(CI)(OI)F

Om du vill köra det här kommandot i PowerShell 2.0 måste du använda escape-tecken för att förhindra att PowerShell feltolkar parenteserna.

icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F

Från och med PowerShell 3.0 kan du använda stoppparsningssymbolen.

icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F

PowerShell skickar följande kommandosträng till Icacls-programmet:

X:\VMS /grant Dom\HVAdmin:(CI)(OI)F

SE ÄVEN

about_Command_Syntax