about_PowerShell_exe

Kort beskrivning

Förklarar hur du använder kommandoradsgränssnittet powershell.exe . Visar kommandoradsparametrarna och beskriver syntaxen.

Lång beskrivning

SYNTAX

PowerShell[.exe]
    [-PSConsoleFile <file> | -Version <version>]
    [-NoLogo]
    [-NoExit]
    [-Sta]
    [-Mta]
    [-NoProfile]
    [-NonInteractive]
    [-InputFormat {Text | XML}]
    [-OutputFormat {Text | XML}]
    [-WindowStyle <style>]
    [-EncodedCommand <Base64EncodedCommand>]
    [-ConfigurationName <string>]
    [-File - | <filePath> <args>]
    [-ExecutionPolicy <ExecutionPolicy>]
    [-Command - | { <script-block> [-args <arg-array>] }
                | { <string> [<CommandParameters>] } ]

PowerShell[.exe] -Help | -? | /?

Parametrar

-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.

-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. Mer information finns i Installera PowerShell.

Döljer upphovsrättsbanderollen vid start.

-NoExit

Avslutas inte när startkommandon har körts.

-Sta

Startar PowerShell med hjälp av 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.

-Mta

Startar PowerShell med hjälp av 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.

-NoProfile

Läser inte in PowerShell-profilen.

-NonInteractive

Visar ingen interaktiv uppmaning för användaren.

-InputFormat {Text | XML}

Beskriver formatet för data som skickas till PowerShell. Giltiga värden är "Text" (textsträngar) eller "XML" (serialiserat CLIXML-format).

-OutputFormat {Text | XML}

Avgör hur utdata från PowerShell formateras. Giltiga värden är "Text" (textsträngar) eller "XML" (serialiserat CLIXML-format).

-WindowStyle <Fönsterformat>

Anger fönsterformatet för sessionen. Giltiga värden är Normal, Minimerad, Maximerad och Dold.

-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.

-ConfigurationName-sträng <>

Anger en konfigurationsslutpunkt där PowerShell körs. Detta 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ändarrollen.

-Fil - | <filePath>< args>

Om värdet för File är "-" läss kommandotexten 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 File alls .

Om värdet för Fil är en filsökväg körs skriptet i det lokala omfånget ("dot-sourced"), så att de funktioner och variabler som skriptet skapar är tillgängliga i den aktuella sessionen. Ange sökvägen till skriptfilen och eventuella parametrar. Filen måste vara den sista parametern i kommandot . Alla värden som skrivs efter parametern File tolkas som skriptfilens sökväg och parametrar som skickas till skriptet.

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 cmd.exe syntax: powershell.exe -File .\test.ps1 -TestParam %windir%

Om du däremot kör powershell.exe -File .\test.ps1 -TestParam $env:windir i cmd.exe resulterar det i att skriptet tar emot strängliteralen $env:windir eftersom den inte har någon särskild betydelse för det aktuella cmd.exe-gränssnittet . Stilen $env:windir för miljövariabelreferensen 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, använder %~dp0 du i stället för .\ eller $PSScriptRoot för att representera den aktuella körningskatalogen: powershell.exe -File %~dp0test.ps1 -TestParam %windir%. Om du i stället använde .\test.ps1skulle PowerShell utlösa ett fel eftersom det inte går att hitta sökvägen till literalen .\test.ps1

När värdet för File är en filsökväg måsteFile vara den sista parametern i kommandot eftersom alla tecken som skrivs efter filparameternamnet tolkas som skriptfilens sökväg följt av skriptparametrarna.

Du kan inkludera skriptparametrar och värden i värdet för filparametern . Exempelvis: -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 togs bort i PowerShell 6 (pwsh.exe).

Anteckning

Parametern File stöder inte 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.

-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.

-Kommando

Kör de angivna kommandona (och eventuella parametrar) som om de hade skrivits i PowerShell-kommandotolken och avslutas sedan, såvida inte parametern NoExit har angetts.

Värdet för Kommandot kan vara -, ett skriptblock eller en sträng. Om värdet för Kommando är -, läss kommandotexten från standardindata.

Kommandoparametern accepterar bara ett skriptblock för körning när den kan identifiera värdet som skickas till Kommando som en ScriptBlock-typ. Detta är endast möjligt när du kör powershell.exe från en annan PowerShell-värd. Typen ScriptBlock kan finnas i en befintlig variabel, returneras från ett uttryck eller parsas av PowerShell-värden som ett literalskriptblock omgivet av klammerparenteser ({}) innan den skickas till powershell.exe.

powershell -Command {Get-WinEvent -LogName security}

I cmd.exefinns det inget sådant som ett skriptblock (eller ScriptBlock-typ ), så värdet som skickas till Kommandot kommer alltid att vara 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-kommandotolk och skriver ut innehållet i skriptblocket till dig igen.

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 Kommando är en sträng måste kommandot vara den sista parametern för pwsh, eftersom alla argument som följer den tolkas som en del av kommandot som ska köras.

När resultatet anropas inifrån en befintlig PowerShell-session returneras de till det överordnade gränssnittet som avserialiserade XML-objekt, inte levande objekt. För andra gränssnitt returneras resultatet som strängar.

Om värdet för Kommando är -, läss kommandotexten från standardindata. Du måste omdirigera standardindata när du använder kommandoparametern med standardindata. Exempel:

@'
"in"

"hi" |
  % { "$_ there" }

"out"
'@ | powershell -NoProfile -Command -

Det här exemplet genererar följande utdata:

in
hi there
out

Processens slutkod bestäms av status för det senaste kommandot (som kördes) i skriptblocket. 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 1konverteras slutkoden till 1 för processens slutkod. Om du vill bevara den specifika slutkoden lägger du till exit $LASTEXITCODE i kommandosträngen eller skriptblocket.

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.

-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 LastExitCode på 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