Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
PowerShell je prostředí příkazového řádku a skriptovací jazyk používaný pro automatizaci. Podobně jako v jiných prostředích, jako je bash
v Linuxu nebo v prostředí Windows Command Shell (cmd.exe
), vám PowerShell umožňuje spouštět všechny příkazy dostupné ve vašem systému, nejen příkazy PowerShellu.
Typy příkazů
Pro jakékoli shell v jakémkoli operačním systému existují tři typy příkazů:
klíčová slova jazyka prostředí jsou součástí skriptovacího jazyka prostředí.
- Mezi příklady klíčových slov
bash
patří:if
,then
,else
,elif
afi
. - Mezi příklady klíčových slov
cmd.exe
patří:dir
,copy
,move
,if
aecho
. - Mezi příklady klíčových slov PowerShellu patří:
for
,foreach
,try
,catch
atrap
.
Klíčová slova shellového jazyka lze použít pouze ve spouštěcím prostředí shellu. Neexistuje žádný spustitelný soubor externí vůči shellu, který poskytuje funkčnost klíčového slova.
- Mezi příklady klíčových slov
nativní příkazy operačního systému jsou spustitelné soubory nainstalované v operačním systému. Spustitelné soubory je možné spustit z libovolného prostředí příkazového řádku, jako je PowerShell. To zahrnuje soubory skriptu, které můžou vyžadovat správné fungování jiných prostředí. Pokud například v PowerShellu spustíte dávkový skript Windows (soubor
.cmd
), PowerShell spustícmd.exe
a předá dávkový soubor ke spuštění.Příkazy specifické pro prostředí shellu jsou příkazy definované v externích souborech, které lze použít pouze v běhovém prostředí shellu. Patří mezi ně skripty a funkce, nebo to mohou být speciálně vytvořené moduly, které přidávají příkazy do běhového prostředí shellu. V PowerShellu se tyto příkazy označují jako rutiny (vyslovuje se "command-lets").
Spouštění nativních příkazů
Jakýkoli nativní příkaz lze spustit z příkazového řádku PowerShellu. Příkaz obvykle spustíte přesně tak, jak v bash
nebo cmd.exe
. Následující příklad ukazuje spuštění příkazu grep
v bash
v Ubuntu Linuxu.
sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
Po spuštění PowerShellu v Ubuntu můžete spustit stejný příkaz z příkazového řádku PowerShellu:
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
Předávání argumentů nativním příkazům
Většina prostředí zahrnuje funkce pro používání proměnných, vyhodnocování výrazů a zpracování řetězců. Ale každý shell to dělá jinak. V PowerShellu začínají všechny parametry znakem spojovníku (-
). Ve cmd.exe
většina parametrů používá znak lomítka (/
). Jiné nástroje příkazového řádku nemusí mít pro parametry speciální znak.
Každé prostředí má svůj vlastní způsob zpracování a vyhodnocování řetězců na příkazovém řádku. Při spouštění nativních příkazů v PowerShellu, které očekávají, že řetězce budou citovány určitým způsobem, budete možná muset upravit způsob předávání těchto řetězců.
Další informace najdete v následujících článcích:
PowerShell 7.2 zavedl novou experimentální funkci PSNativeCommandArgumentPassing
, která zlepšila nativní zpracování příkazů. Další informace najdete v tématu $PSNativeCommandArgumentPassing
.
Zpracování výstupů a chyb
PowerShell má také několik dalších výstupních datových proudů než jiná prostředí. Skripty bash
a cmd.exe
mají stdout a stderr. PowerShell má šest výstupních datových proudů. Další informace najdete v tématu "about_Redirection" a "about_Output_Streams".
Obecně platí, že výstup odeslaný do stdout nativním příkazem se odešle do datového proudu Success v PowerShellu. Výstup odeslaný nativním příkazem do stderr je v PowerShellu odeslán do datového proudu Chyba.
Pokud má nativní příkaz nenulový ukončovací kód, $?
je nastaven na $false
. Pokud je ukončovací kód nula, $?
je nastavena na $true
.
To se ale změnilo v PowerShellu 7.2. Chybové záznamy přesměrované z nativních příkazů, například při použití operátorů přesměrování (2>&1
), se nezapisují do proměnné $Error
v PowerShell a proměnná s předvolbami $ErrorActionPreference
nemá vliv na přesměrovaný výstup.
Mnoho nativních příkazů zapisuje do stderr jako alternativní datový proud pro další informace. Toto chování může způsobit nejasnost v PowerShellu při prohlížení chyb a další výstupní informace mohou být ztraceny, pokud je $ErrorActionPreference
nastaven na stav, který ztlumí výstup.
PowerShell 7.3 přidal novou experimentální funkci PSNativeCommandErrorActionPreference
, která umožňuje řídit, jestli se výstup do stderr
považuje za chybu. Další informace najdete v tématu $PSNativeCommandUseErrorActionPreference
.
Spouštění příkazů PowerShellu
Jak bylo dříve uvedeno, příkazy PowerShellu se označují jako rutiny. Cmdlety se shromažďují do modulů PowerShell, které lze načíst na vyžádání. Cmdlety lze psát v libovolném zkompilovaném jazyce .NET nebo pomocí samotného skriptovacího jazyka PowerShell.
Příkazy PowerShellu, které spouštějí další příkazy
Operátor volání powershellu (&
) umožňuje spouštět příkazy uložené v proměnných a reprezentované řetězci nebo bloky skriptu. Můžete ho použít ke spuštění libovolného nativního příkazu nebo příkazu PowerShellu. To je užitečné ve skriptu, když potřebujete dynamicky vytvořit parametry příkazového řádku pro nativní příkaz. Další informace naleznete v operátor hovoru.
Rutinu Start-Process
lze použít ke spouštění nativních příkazů, ale měla by se používat jenom v případě, že potřebujete řídit, jak se příkaz spustí. Rutina má parametry pro podporu následujících scénářů:
- Spuštění příkazu s použitím různých přihlašovacích údajů
- Skrytí okna konzoly vytvořeného novým procesem
- Přesměrování proudu stdin , stdout a stderr .
- Použití jiného pracovního adresáře pro příkaz
Následující příklad spustí nativní příkaz sort.exe
s přesměrovanými vstupními a výstupními datovými proudy.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
Další informace najdete v tématu start-process.
Ve Windows rutina Invoke-Item
provede výchozí akci pro zadanou položku. Například spustí spustitelný soubor nebo otevře soubor dokumentu pomocí aplikace přidružené k typu souboru dokumentu. Výchozí akce závisí na typu položky a je vyřešena poskytovatelem PowerShellu, který poskytuje přístup k položce.
Následující příklad otevře úložiště zdrojového kódu PowerShellu ve výchozím webovém prohlížeči.
Invoke-Item https://github.com/PowerShell/PowerShell
Pro více informací se podívejte na Invoke-Item.