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
Všechny parametry nerozlišují malá a velká písmena.
-Soubor - | <filePath><args>
Hodnota File může být -
nebo cesta k souboru a volitelné parametry. Pokud je -
hodnota File , příkazy se čtou ze standardního vstupu.
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. 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
).
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 in cmd.exe
a chcete předat hodnotu proměnné prostředí, použijte cmd.exe
syntaxi: powershell.exe -File .\test.ps1 -TestParam %windir%
Naproti tomu spuštění powershell.exe -File .\test.ps1 -TestParam $env:windir
ve výsledku ve cmd.exe
skriptu přijímá literálový řetězec $env:windir
, protože pro aktuální cmd.exe
prostředí nemá žádný zvláštní význam. Styl $env:windir
odkazu na proměnnou prostředí lze použít uvnitř parametru Command , protože je interpretován 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: pwsh -File %~dp0test.ps1 -TestParam %windir%
. Pokud místo toho použijete .\test.ps1
, PowerShell vyvolá chybu, protože nemůže najít cestu literálu. .\test.ps1
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.
Pokud je -
hodnota File , příkazy se čtou 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. Při čtení ze standardního vstupu se vstupní příkazy spouští po jednom příkazu, jako by byly zadány na příkazovém řádku PowerShellu. Pokud se příkaz správně parsuje, příkaz se nespustí. Ukončovací kód procesu je určen stavem posledního (spuštěného) příkazu. Při úspěšném spuštění je ukončovací kód vždy 0
. Když se soubor skriptu ukončí příkazem exit
, ukončovací kód procesu se nastaví na číselný argument použitý s příkazem exit
.
-Command
Podobně jako v případě, že dojde k chybě ukončování skriptu, je ukončovací kód nastaven na 1
. Nicméně, na rozdíl od -Command
, když je spuštění přerušeno ctrl +C ukončovací kód je .0
Další informace najdete v about_Automatic_Variables$LASTEXITCODE
.
-Příkaz
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 je blok skriptu (nebo typ ScriptBlock ), takže hodnota předaná do Command je vždy řetězec. Blok skriptu můžete napsat uvnitř řetězce, ale místo jeho spuštění se chová přesně tak, jako kdybyste ho zadali v typickém příkazovém řádku PowerShellu, vytiskněte obsah skriptu, který vám zablokuje.
Ř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.exe
bloku 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 , příkazy se čtou 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
Při čtení ze standardního vstupu se vstup analyzuje a spouští jeden příkaz najednou, jako by byly zadány na příkazovém řádku PowerShellu. Pokud se vstupní kód správně parsuje, příkaz se nespustí. Pokud tento parametr nepoužíváte, relace PowerShellu -NoExit
se ukončí, pokud není k dispozici žádný další vstup pro čtení ze standardního vstupu.
Ukončovací kód procesu je určen stavem posledního (spuštěného) příkazu ve vstupu. 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. Podobně se hodnota 1 vrátí, když dojde k chybě ukončování skriptu (runspace-ukončování), například throw
-ErrorAction Stop
nebo , nebo při přerušení spuštění pomocí Ctrl+C.
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
.
-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.
-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ů.
-NoLogo
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
, Maximized
a 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