about_PowerShell_exe
Kort beskrivning
Förklarar hur du använder kommandoradsgränssnittet powershell.exe
. Visar kommandoradsparametrarna och beskriver syntaxen.
Lång beskrivning
Information om kommandoradsalternativen för PowerShell 7 finns i about_Pwsh.
SYNTAX
PowerShell[.exe]
[-PSConsoleFile <file> | -Version <version>]
[-NoLogo]
[-NoExit]
[-Sta]
[-Mta]
[-NoProfile]
[-NonInteractive]
[-InputFormat {Text | XML}]
[-OutputFormat {Text | XML}]
[-WindowStyle <style>]
[-EncodedArguments <Base64EncodedArguments>]
[-EncodedCommand <Base64EncodedCommand>]
[-ConfigurationName <string>]
[-File - | <filePath> <args>]
[-ExecutionPolicy <ExecutionPolicy>]
[-Command - | { <script-block> [-args <arg-array>] }
| { <string> [<CommandParameters>] } ]
PowerShell[.exe] -Help | -? | /?
Parametrar
Alla parametrar är skiftlägesokänsliga.
-File - | <filePath><args>
Värdet för Filen kan vara -
eller en filsökväg och valfria parametrar. Om värdet för Fil är -
, läss kommandon från standardindata.
Om värdet för Fil är en filsökväg körs skriptet i det lokala omfånget ("dot-sourced") för den nya sessionen, så att de funktioner och variabler som skriptet skapar är tillgängliga i den nya sessionen. Ange skriptfilsökvägen och eventuella parametrar. Filen måste vara den sista parametern i kommandot. Alla värden som skrivs efter filparametern tolkas som skriptfilens sökväg och parametrar som skickas till skriptet. Till exempel: -File .\Get-Script.ps1 -Domain Central
Normalt inkluderas eller utelämnas växelparametrarna för ett skript.
Följande kommando använder till exempel parametern Alla i Get-Script.ps1
skriptfilen: -File .\Get-Script.ps1 -All
I sällsynta fall kan du behöva ange ett booleskt värde för en parameter.
Det går inte att skicka ett explicit booleskt värde för en växelparameter när du kör ett skript på det här sättet. Den här begränsningen har tagits bort i PowerShell 6 (pwsh.exe
).
Parametrar som skickas till skriptet skickas som literalsträngar efter tolkning av det aktuella gränssnittet. Om du till exempel är i cmd.exe
och vill skicka ett miljövariabelvärde använder du syntaxen cmd.exe
: powershell.exe -File .\test.ps1 -TestParam %windir%
Om du däremot kör powershell.exe -File .\test.ps1 -TestParam $env:windir
i resulterar det i cmd.exe
att skriptet tar emot literalsträngen $env:windir
eftersom den inte har någon särskild betydelse för det aktuella cmd.exe
gränssnittet. Referensen $env:windir
för miljövariabeln kan användas i en kommandoparameter , eftersom den tolkas som PowerShell-kod.
På samma sätt, om du vill köra samma kommando från ett Batch-skript, skulle du använda %~dp0
i stället för .\
eller $PSScriptRoot
för att representera den aktuella körningskatalogen: pwsh -File %~dp0test.ps1 -TestParam %windir%
. Om du använder .\test.ps1
i stället genererar PowerShell ett fel eftersom det inte går att hitta den literala sökvägen .\test.ps1
Kommentar
Parametern File kan inte stödja skript med hjälp av en parameter som förväntar sig en matris med argumentvärden. Detta är tyvärr en begränsning av hur ett internt kommando hämtar argumentvärden. När du anropar en intern körbar fil (till exempel powershell
eller pwsh
) vet den inte vad den ska göra med en matris, så den skickas som en sträng.
Om värdet för Fil är -
, läss kommandon från standardindata.
Om du kör powershell -File -
utan omdirigerade standardindata startas en vanlig session. Det här är samma sak som att inte ange parametern alls File
. När du läser från standardindata körs indatainstruktionerna en instruktion i taget som om de hade skrivits i PowerShell-kommandotolken. Om en instruktion inte parsas korrekt körs inte -instruktionen. Processens slutkod bestäms av status för det senaste kommandot (körd). Med lyckad körning är slutkoden alltid 0
. När skriptfilen avslutas med ett exit
kommando anges processens slutkod till det numeriska argumentet som används med exit
kommandot .
-Command
På samma sätt som när ett skriptavslutande fel inträffar är slutkoden inställd på 1
. Men till skillnad från -Command
, när körningen avbryts med Ctrl+C är 0
slutkoden . Mer information $LASTEXITCODE
finns i about_Automatic_Variables.
-Befallning
Värdet för Kommandot kan vara -
, ett skriptblock eller en sträng. Om värdet för Kommandot är -
, läss kommandotexten från standardindata.
Kommandoparametern accepterar endast ett skriptblock för körning när det kan identifiera värdet som skickas till Kommando som en ScriptBlock-typ. Detta är bara möjligt när du kör powershell.exe
från en annan PowerShell-värd. ScriptBlock-typen kan finnas i en befintlig variabel, returneras från ett uttryck eller parsas av PowerShell-värden som ett literalskriptblock omgivet av klammerparenteser ({}
), innan det skickas till powershell.exe
.
powershell -Command {Get-WinEvent -LogName security}
I cmd.exe
finns det inget sådant som ett skriptblock (eller ScriptBlock-typ ), så värdet som skickas till Kommandot är alltid en sträng. Du kan skriva ett skriptblock i strängen, men i stället för att köras fungerar det precis som om du skrev det i en vanlig PowerShell-prompt och skriver ut innehållet i skriptblocket tillbaka till dig.
En sträng som skickas till Kommandot körs fortfarande som PowerShell-kod, så skriptblockets klammerparenteser krävs ofta inte i första hand när du kör från cmd.exe
. Om du vill köra ett infogat skriptblock som definierats i en sträng kan anropsoperatorn &
användas:
powershell.exe -Command "& {Get-WinEvent -LogName security}"
Om värdet för Kommandot är en sträng måste kommandot vara den sista parametern för pwsh, eftersom alla argument som följer tolkas som en del av kommandot som ska köras.
När de anropas inifrån en befintlig PowerShell-session returneras resultatet till det överordnade gränssnittet som deserialiserade XML-objekt, inte levande objekt. För andra gränssnitt returneras resultatet som strängar.
Om värdet för Kommandot är -
läss kommandona från standardindata. Du måste omdirigera standardindata när du använder kommandoparametern med standardindata. Till exempel:
@'
"in"
"hi" |
% { "$_ there" }
"out"
'@ | powershell -NoProfile -Command -
Det här exemplet genererar följande utdata:
in
hi there
out
När du läser från standardindata parsas indata och körs en instruktion i taget, som om de hade skrivits i PowerShell-kommandotolken. Om indatakoden inte parsas korrekt körs inte -instruktionen. Om du inte använder parametern -NoExit
avslutas PowerShell-sessionen när det inte finns fler indata att läsa från standardindata.
Processens slutkod bestäms av status för det senaste kommandot (körs) i indata. Slutkoden är 0
när $?
är $true
eller 1
när $?
är $false
. Om det sista kommandot är ett externt program eller ett PowerShell-skript som uttryckligen anger en annan slutkod än 0
eller 1
konverteras slutkoden till 1
för processens slutkod. På samma sätt returneras värdet 1 när ett skriptavslutande (runspace-terminerande) fel, till exempel ett throw
eller -ErrorAction Stop
, inträffar eller när körningen avbryts med Ctrl+C.
Om du vill bevara den specifika slutkoden lägger du till exit $LASTEXITCODE
i kommandosträngen eller skriptblocket. Mer information $LASTEXITCODE
finns i about_Automatic_Variables.
-ConfigurationName-sträng <>
Anger en konfigurationsslutpunkt där PowerShell körs. Det kan vara vilken slutpunkt som helst som är registrerad på den lokala datorn, inklusive standardslutpunkterna för PowerShell-fjärrkommunikation eller en anpassad slutpunkt som har specifika funktioner för användarroller.
-EncodedArguments <Base64EncodedArguments>
Accepterar kommandoargument för base64-kodad strängversion. Använd den här parametern för att skicka argument som kräver komplex, kapslad citat. Base64-representationen måste vara en UTF-16LE-kodad sträng.
-EncodedCommand <Base64EncodedCommand>
Accepterar en base-64-kodad strängversion av ett kommando. Använd den här parametern för att skicka kommandon till PowerShell som kräver komplexa citattecken eller klammerparenteser. Strängen måste formateras med utf-16LE-teckenkodning.
-ExecutionPolicy <ExecutionPolicy>
Anger standardkörningsprincipen för den aktuella sessionen och sparar den i $env:PSExecutionPolicyPreference
miljövariabeln. Den här parametern ändrar inte PowerShell-körningsprincipen som anges i registret. Information om PowerShell-körningsprinciper, inklusive en lista med giltiga värden, finns i about_Execution_Policies.
-InputFormat {Text | XML}
Beskriver formatet för data som skickas till PowerShell. Giltiga värden är Text
(textsträngar) eller XML
(serialiserat CLIXML-format).
-Mta
Startar PowerShell med en flertrådad lägenhet. Den här parametern introduceras i PowerShell 3.0. I PowerShell 2.0 är multitrådad lägenhet (MTA) standard. I PowerShell 3.0 är entrådad lägenhet (STA) standard.
-NoExit
Avslutas inte efter att startkommandon har körts.
-NonInteractive
Den här växeln används för att skapa sessioner som inte ska kräva användarindata. Detta är användbart för skript som körs i schemalagda aktiviteter eller CI/CD-pipelines. Alla försök att använda interaktiva funktioner, till exempel Read-Host
eller bekräftelsemeddelanden, resulterar i att instruktionen avslutar fel i stället för hängande.
-NoLogo
Döljer upphovsrättsbanderollen vid start.
-NoProfile
Läser inte in PowerShell-profilen.
-OutputFormat {Text | XML}
Avgör hur utdata från PowerShell formateras. Giltiga värden är Text
(textsträngar) eller XML
(serialiserat CLIXML-format).
-PSConsoleFile <FilePath>
Läser in den angivna PowerShell-konsolfilen. Ange sökvägen och namnet på konsolfilen. Om du vill skapa en konsolfil använder du cmdleten Export-Console i PowerShell.
-Sta
Startar PowerShell med en entrådad lägenhet. I Windows PowerShell 2.0 är multitrådad lägenhet (MTA) standard. I Windows PowerShell 3.0 är entrådad lägenhet (STA) standard.
-Version <PowerShell-version>
Startar den angivna versionen av PowerShell. Giltiga värden är 2.0 och 3.0. Den version som du anger måste vara installerad på systemet. Om Windows PowerShell 3.0 är installerat på datorn är "3.0" standardversionen. Annars är "2.0" standardversionen. För mer information, se Installera PowerShell.
-WindowStyle <Window-formatmall>
Anger fönsterformatet för sessionen. Giltiga värden är Normal
, Minimized
, Maximized
och Hidden
.
-Hjälp-?/?
Visar hjälp för PowerShell.exe
. Om du skriver ett PowerShell.exe
kommando i en PowerShell-session förbereder du kommandoparametrarna med ett bindestreck (-
), inte ett snedstreck (/
). Du kan använda antingen ett bindestreck eller snedstreck i cmd.exe
.
REMARKS
Felsökningsanteckning: I PowerShell 2.0 misslyckas start av vissa program från PowerShell-konsolen med ett LastExitCode-0xc0000142 .
EXEMPEL
# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1
# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML
# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"
# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}
# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"
# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand