Sdílet prostřednictvím


about_PowerShell_exe

Krátký popis

Vysvětluje, jak používat rozhraní příkazového powershell.exe řádku. Zobrazí parametry příkazového řádku a popisuje syntaxi.

Dlouhý popis

Informace o možnostech příkazového řádku pro PowerShell 7 najdete v tématu about_Pwsh.

SYNTAXE

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 | -? | /?

Parametry

-Příkaz

Spustí zadané příkazy (a všechny parametry), jako kdyby byly zadány na příkazovém řádku PowerShellu, a poté se ukončí, pokud NoExit není zadaný parametr.

Hodnota Command může být -, blok skriptu nebo řetězec. Pokud je -hodnota Command , text příkazu se načte ze standardního vstupu.

Parametr Command přijímá pouze blok skriptu ke spuštění, pokud dokáže rozpoznat hodnotu předanou příkazu jako typ ScriptBlock . To je možné jenom v případě, že je spuštěný powershell.exe z jiného hostitele PowerShellu. Typ ScriptBlock může být obsažen v existující proměnné, vrácený z výrazu nebo parsován hostitelem PowerShellu jako literálový blok skriptu uzavřený ve složených závorkách ({}), před předáním do powershell.exe.

powershell -Command {Get-WinEvent -LogName security}

V cmd.exe, neexistuje žádná taková věc jako blok skriptu (nebo Typ ScriptBlock ), takže hodnota předaná do Command bude vždy řetězec. Blok skriptu můžete napsat uvnitř řetězce, ale místo jeho spuštění se bude chovat přesně tak, jako kdybyste ho zadali na typickém příkazovém řádku PowerShellu, a vytiskněte obsah bloku skriptu zpět za vás.

Řetězec předaný příkazu se stále spouští jako kód PowerShellu, takže při spuštění závorky cmd.exebloku skriptu se často nevyžadují na prvním místě. Pokud chcete spustit vložený blok skriptu definovaný uvnitř řetězce, můžete použít operátor& volání:

powershell.exe -Command "& {Get-WinEvent -LogName security}"

Pokud je hodnota Command řetězec, musí být příkaz posledním parametrem pro pwsh, protože všechny argumenty, které následují, jsou interpretovány jako součást příkazu ke spuštění.

Při zavolání z existující relace PowerShellu se výsledky vrátí do nadřazeného prostředí jako deserializované objekty XML, nikoli živé objekty. U jiných prostředí se výsledky vrátí jako řetězce.

Pokud je -hodnota Command , text příkazu se načte ze standardního vstupu. Standardní vstup je nutné přesměrovat při použití parametru Command se standardním vstupem. Příklad:

@'
"in"

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

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

Tento příklad vytvoří následující výstup:

in
hi there
out

Ukončovací kód procesu je určen stavem posledního (spuštěného) příkazu v bloku skriptu. Ukončovací kód je 0 , kdy $? je $true nebo 1 kdy $? je $false. Pokud je posledním příkazem externí program nebo skript PowerShellu, který explicitně nastaví ukončovací kód jiný než 0 nebo 1, tento ukončovací kód se převede na 1 ukončovací kód procesu. Pokud chcete zachovat konkrétní ukončovací kód, přidejte exit $LASTEXITCODE ho do příkazového řetězce nebo bloku skriptu.

Další informace najdete v about_Automatic_Variables$LASTEXITCODE.

Podobně se hodnota 1 vrátí, když dojde k chybě ukončování skriptu (runspace-ukončování), například throw-ErrorAction Stopnebo , nebo při přerušení spuštění pomocí Ctrl+C.

-ConfigurationName <string>

Určuje koncový bod konfigurace, ve kterém je spuštěný PowerShell. Může se jednat o libovolný koncový bod zaregistrovaný na místním počítači, včetně výchozích koncových bodů vzdálené komunikace PowerShellu nebo vlastního koncového bodu s konkrétními funkcemi role uživatele.

-EncodedArguments <Base64EncodedArguments>

Přijímá argumenty příkazu verze řetězce s kódováním Base64. Tento parametr použijte k odeslání argumentů, které vyžadují složité vnořené uvozování. Reprezentace Base64 musí být řetězec s kódováním UTF-16LE.

-EncodedCommand <Base64EncodedCommand>

Přijímá verzi řetězce s kódováním base-64 příkazu. Pomocí tohoto parametru odešlete příkazy do PowerShellu, které vyžadují složité uvozovky nebo složené závorky. Řetězec musí být naformátován pomocí kódování znaků UTF-16LE.

-ExecutionPolicy ExecutionPolicy ExecutionPolicy <>

Nastaví výchozí zásadu spouštění pro aktuální relaci a uloží ji do $env:PSExecutionPolicyPreference proměnné prostředí. Tento parametr nemění zásady spouštění PowerShellu nastavené v registru. Informace o zásadách spouštění PowerShellu, včetně seznamu platných hodnot, najdete v tématu about_Execution_Policies.

-Soubor - | <Filepath><Args>

Pokud je -hodnota File (Soubor), text příkazu se načte ze standardního vstupu. Spuštění powershell -File - bez přesměrovaného standardního vstupu spustí běžnou relaci. To je stejné jako nezadání parametru File vůbec.

Pokud je hodnota File cesta k souboru, skript se spustí v místním oboru ("dot-sourced") nové relace, aby funkce a proměnné, které skript vytvoří, byly v této nové relaci k dispozici. Zadejte cestu k souboru skriptu a všechny parametry. Soubor musí být posledním parametrem příkazu. Všechny hodnoty zadané po parametru File jsou interpretovány jako cesta k souboru skriptu a parametry předané ho skriptu.

Parametry předané skriptu se předávají jako literální řetězce po interpretaci aktuálním prostředím. Pokud jste například v cmd.exe a chcete předat hodnotu proměnné prostředí, použijte syntaxi cmd.exe : powershell.exe -File .\test.ps1 -TestParam %windir%

Naproti tomu spuštění powershell.exe -File .\test.ps1 -TestParam $env:windir v cmd.exe vede ke skriptu, který přijímá řetězec $env:windir literálu, protože nemá pro aktuální cmd.exe shell žádný zvláštní význam. Styl $env:windir odkazu na proměnnou prostředí lze použít uvnitř parametru Command , protože se bude interpretovat jako kód PowerShellu.

Podobně pokud chcete spustit stejný příkaz ze skriptu Batch, místo .\%~dp0 nebo $PSScriptRoot k reprezentaci aktuálního spouštěcího adresáře: powershell.exe -File %~dp0test.ps1 -TestParam %windir%. Pokud jste místo toho použili .\test.ps1, PowerShell vyvolá chybu, protože nemůže najít cestu literálu. .\test.ps1

Pokud je hodnota File cesta k souboru, soubormusí být posledním parametrem v příkazu, protože všechny znaky zadané za názvem parametru File jsou interpretovány jako cesta k souboru skriptu následované parametry skriptu.

Parametry skriptu a hodnoty můžete zahrnout do hodnoty parametru File . Příklad: -File .\Get-Script.ps1 -Domain Central

Parametry přepínače skriptu jsou obvykle zahrnuty nebo vynechány. Například následující příkaz používá parametr All souboru Get-Script.ps1 skriptu: -File .\Get-Script.ps1 -All

Ve výjimečných případech může být nutné zadat logickou hodnotu parametru. Při spuštění skriptu tímto způsobem není možné předat explicitní logickou hodnotu parametru přepínače. Toto omezení bylo odebráno v PowerShellu 6 (pwsh.exe).

Poznámka:

Parametr File nemůže podporovat skripty pomocí parametru, který očekává pole hodnot argumentů. Toto je bohužel omezení způsobu, jakým nativní příkaz získá hodnoty argumentů. Když zavoláte nativní spustitelný soubor (například powershell nebo pwsh), neví, co dělat s polem, takže se předá jako řetězec.

Když se soubor skriptu ukončí příkazem exit , ukončovací kód procesu se nastaví na číselný argument použitý s příkazem exit . Při normálním ukončení je ukončovací kód vždy 0.

Další informace najdete v about_Automatic_Variables$LASTEXITCODE.

-InputFormat {Text | XML}

Popisuje formát dat odesílaných do PowerShellu. Platné hodnoty jsou Text (textové řetězce) nebo XML (serializovaný formát CLIXML).

-Mta

Spustí PowerShell pomocí vícevláknového apartmánu. Tento parametr je zavedený v PowerShellu 3.0. V PowerShellu 2.0 je výchozí vícevláknový apartmán (MTA). V PowerShellu 3.0 je výchozí jednovláknový apartmán (STA).

-NoExit

Po spuštění spouštěcíchpříkazůch

-Neinteraktivní

Tento přepínač slouží k vytváření relací, které by neměly vyžadovat uživatelský vstup. To je užitečné pro skripty, které běží v naplánovaných úlohách nebo kanálech CI/CD. Všechny pokusy o použití interaktivních funkcí, jako Read-Host jsou výzvy k potvrzení nebo výzvy k potvrzení, způsobí, že se místo předsazení zobrazí ukončení příkazů.

Skryje banner s autorskými právy při spuštění.

-NoProfile

Nenačte profil PowerShellu.

-OutputFormat {Text | XML}

Určuje formátování výstupu z PowerShellu. Platné hodnoty jsou Text (textové řetězce) nebo XML (serializovaný formát CLIXML).

-PSConsoleFile <FilePath>

Načte zadaný soubor konzoly PowerShellu. Zadejte cestu a název souboru konzoly. K vytvoření souboru konzoly použijte rutinu Export-Console v PowerShellu.

-Sta

Spustí PowerShell pomocí apartmánu s jedním vláknem. Ve Windows PowerShellu 2.0 je výchozí vícevláknový apartmán (MTA). Ve Windows PowerShellu 3.0 je výchozí jednovláknový apartmán (STA).

-Version PowerShell Version <>

Spustí zadanou verzi PowerShellu. Platné hodnoty jsou 2,0 a 3.0. Zadaná verze musí být v systému nainstalovaná. Pokud je v počítači nainstalovaný Windows PowerShell 3.0, je výchozí verze 3.0. V opačném případě je výchozí verze 2.0. Další informace o tom naleznete v tématu Instalace PowerShell.

-WindowStyle <Window style>

Nastaví styl okna relace. Platné hodnoty jsou Normal, Minimized, Maximizeda Hidden.

-Pomoc-?/?

Zobrazí nápovědu pro PowerShell.exe. Pokud píšete PowerShell.exe příkaz v relaci PowerShellu, předpište parametry příkazu pomocí spojovníku (-), nikoli lomítka (/). Můžete použít buď spojovník, nebo lomítko v cmd.exe.

POZNÁMKY

Poznámka k řešení potíží: V PowerShellu 2.0 se spuštění některých programů z konzoly PowerShellu nezdaří s kódem LastExitCode 0xc0000142.

PŘÍKLADY

# 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