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.
Krátký popis
Popisuje, jak PowerShell určuje, který příkaz se má spustit.
Dlouhý popis
Priorita příkazu popisuje, jak PowerShell určuje, který příkaz se má spustit, když relace obsahuje více než jeden příkaz se stejným názvem. Příkazy v rámci relace můžou být skryté nebo nahrazené příkazy se stejným názvem. V tomto článku se dozvíte, jak spouštět skryté příkazy a jak se vyhnout konfliktům názvů příkazů.
Priorita příkazů
Pokud relace PowerShellu obsahuje více než jeden příkaz se stejným názvem, Určuje PowerShell, který příkaz se má spustit, pomocí následujících pravidel.
Pokud zadáte cestu k příkazu, PowerShell spustí příkaz v umístění určeném cestou.
Následující příkaz například spustí skript FindDocs.ps1 v adresáři C:\TechDocs:
C:\TechDocs\FindDocs.ps1
Ke spuštění libovolného spustitelného příkazu můžete použít úplnou cestu. PowerShell jako funkce zabezpečení nespouští spustitelné příkazy, včetně skriptů PowerShellu a nativních příkazů, pokud se příkaz nenachází v cestě uvedené v proměnné prostředí $Env:PATH.
Pokud chcete spustit spustitelný soubor, který je v aktuálním adresáři, zadejte úplnou cestu nebo použijte relativní cestu .\ k reprezentaci aktuálního adresáře.
Pokud chcete například spustit soubor FindDocs.ps1 v aktuálním adresáři, zadejte:
.\FindDocs.ps1
Pokud nezadáte cestu, PowerShell při spouštění příkazů použije následující pořadí priorit.
- Alias
- Funkce
- Rutina (viz překladu názvů rutin)
- Externí spustitelné soubory (včetně souborů skriptů PowerShellu)
Proto pokud zadáte help, PowerShell nejprve vyhledá alias s názvem help, pak funkci s názvem helpa nakonec rutinu s názvem help. Spustí první help položku, kterou najde.
Pokud například relace obsahuje rutinu a funkci, obě pojmenované Get-Map, když zadáte Get-Map, PowerShell spustí funkci.
Poznámka
To platí jenom pro načtené příkazy. Pokud existuje spustitelný soubor build a alias build funkce s názvem Invoke-Build uvnitř modulu, který není načten do aktuální relace, spustí PowerShell místo toho spustitelný soubor build. Moduly se automaticky nenačítají, pokud najde externí spustitelný soubor. Je to jenom tehdy, když se nenašel žádný externí spustitelný soubor, že se vyvolá alias, funkce nebo rutina s daným názvem.
Řešení položek se stejnými názvy
V důsledku těchto pravidel je možné položky nahradit nebo skrýt položkami se stejným názvem.
Položky jsou skryté nebo stínované, pokud máte stále přístup k původní položce, například kvalifikací názvu položky názvem modulu.
Pokud například importujete funkci, která má stejný název jako rutina v relaci, bude tato rutina skrytá, ale nenahradí se. Rutinu můžete spustit zadáním jeho názvu kvalifikovaného modulu.
Pokud jsou položky nahrazeny nebo přepsání, nebudete už mít přístup k původní položce.
Pokud například importujete proměnnou se stejným názvem jako proměnná v relaci, nahradí se původní proměnná. Nemůžete kvalifikovat proměnnou s názvem modulu.
Pokud vytvoříte funkci na příkazovém řádku a potom naimportujete funkci se stejným názvem, původní funkce se nahradí.
Vyhledání skrytých příkazů
Parametr All rutiny Get-Command získá všechny příkazy se zadaným názvem, i když jsou skryté nebo nahrazené. Počínaje PowerShellem 3.0 ve výchozím nastavení Get-Command získá pouze příkazy, které se spustí při zadání názvu příkazu.
V následujících příkladech relace obsahuje funkci Get-Date a rutinu Get-Date. Pomocí Get-Command můžete určit, který příkaz je zvolen jako první.
Get-Command Get-Date
CommandType Name ModuleName
----------- ---- ----------
Function Get-Date
Pomocí parametru All zobrazí seznam dostupných příkazů Get-Date.
Get-Command Get-Date -All
CommandType Name Version Source
----------- ---- ------- ------
Function Get-Date
Cmdlet Get-Date 7.0.0.0 Microsoft.PowerShell.Utility
Get-Command where -All
CommandType Name Version Source
----------- ---- ------- ------
Alias where -> Where-Object
Application where.exe 10.0.22621.1 C:\Windows\system32\where.exe
Konkrétní příkazy můžete spustit tak, že zahrnete kvalifikující informace, které tento příkaz odlišují od jiných příkazů, které můžou mít stejný název.
Pro rutiny můžete použít kvalifikovaný název modulu. U spustitelných souborů můžete zahrnout příponu souboru. Například ke spuštění spustitelné verze where použít where.exe.
Použití názvů kvalifikovaných k modulům
Pomocí modulu kvalifikovaného názvu rutiny můžete spouštět příkazy skryté položkou se stejným názvem. Rutinu Get-Date můžete například spustit tak, že ji opravíte s názvem modulu Microsoft.PowerShell.Utility nebo jeho cestou. Při použití názvů kvalifikovaných k modulům je možné modul automaticky importovat do relace v závislosti na hodnotě $PSModuleAutoLoadingPreference.
Poznámka
Názvy modulů nemůžete použít k opravňujícím proměnným nebo aliasům.
Použití názvů kvalifikovaných k modulům zajišťuje, že spouštíte příkaz, který chcete spustit. Toto je doporučená metoda volání rutin při psaní skriptů, které chcete distribuovat.
Následující příklad ukazuje, jak kvalifikovat příkaz zahrnutím názvu modulu.
Důležitý
Kvalifikace modulu používá znak zpětného lomítka (\) k oddělení názvu modulu od názvu příkazu bez ohledu na platformu.
New-Alias -Name "Get-Date" -Value "Get-ChildItem"
Microsoft.PowerShell.Utility\Get-Date
Tuesday, May 16, 2023 1:32:51 PM
Pokud chcete spustit příkaz New-Map z modulu MapFunctions, použijte jeho název kvalifikovaný pro modul:
MapFunctions\New-Map
Pokud chcete najít modul, ze kterého byl příkaz importován, použijte vlastnost ModuleName příkazů.
(Get-Command <command-name>).ModuleName
Pokud chcete například najít zdroj rutiny Get-Date, zadejte:
(Get-Command Get-Date).ModuleName
Microsoft.PowerShell.Utility
Pokud chcete kvalifikovat název příkazu pomocí cesty k modulu, musíte před názvem příkazu použít lomítko (/) a znak zpětného lomítka (\). Pomocí následujícího příkladu spusťte rutinu Get-Date:
//localhost/c$/Progra~1/PowerShell/7-preview/Modules/Microsoft.PowerShell.Utility\Get-Date
Cesta může být úplná nebo cesta relativní vzhledem k aktuálnímu umístění.
Ve Windows nemůžete použít cestu kvalifikovanou pro jednotku. Musíte použít cestu UNC, jak je znázorněno v předchozím příkladu, nebo cestu, která je relativní vzhledem k aktuální jednotce.
Následující příklad předpokládá, že vaše aktuální umístění je na C: jednotce.
/Progra~1/PowerShell/7-preview/Modules/Microsoft.PowerShell.Utility\Get-Date
Použití operátoru volání
Pomocí operátoru volání (&) můžete také spouštět skryté příkazy tím, že je zkombinujete s voláním Get-ChildItem (alias je dir), Get-Command nebo Get-Module.
Operátor volání spouští řetězce a skriptové bloky v podřízené oblasti. Další informace najdete v tématu about_Operators.
Pomocí následujícího příkazu například spusťte funkci s názvem Map, která je skrytá aliasem s názvem Map.
& (Get-Command -Name Map -CommandType Function)
nebo
& (dir Function:\map)
Skrytý příkaz můžete uložit také do proměnné, aby se usnadnilo spuštění.
Následující příkaz například uloží funkci Map do proměnné $myMap a pak ji spustí pomocí operátoru Call.
$myMap = (Get-Command -Name map -CommandType Function)
& ($myMap)
Nahrazené položky
Položka nahrazena je položka, ke které už nemáte přístup. Položky můžete nahradit importem položek se stejným názvem z modulu.
Pokud například do relace zadáte funkci Get-Map a naimportujete funkci s názvem Get-Map, nahradí původní funkci. V aktuální relaci ho nemůžete načíst.
Proměnné a aliasy nelze skrýt, protože ke spuštění není možné použít operátor volání ani kvalifikovaný název. Při importu proměnných a aliasů z modulu nahradí proměnné v relaci stejným názvem.
Překlad názvů rutin
Pokud nepoužíváte kvalifikovaný název rutiny, PowerShell zkontroluje, jestli je rutina načtena v aktuální relaci. Pokud je načteno více modulů, které obsahují stejný název rutiny, PowerShell použije rutinu z prvního nalezeného modulu abecedně.
Pokud rutina není načtená, PowerShell vyhledá nainstalované moduly a automaticky načte první modul, který tuto rutinu obsahuje, a spustí tuto rutinu.
PowerShell vyhledá moduly v každé cestě definované v proměnné prostředí $Env:PSModulePath. Cesty se prohledávají v pořadí, v jakém jsou uvedené v proměnné. V každé cestě se moduly prohledávají v abecedním pořadí. PowerShell používá rutinu z první nalezené shody.
Vyhněte se konfliktům názvů
Nejlepší způsob, jak spravovat konflikty názvů příkazů, je zabránit jim. Při pojmenování příkazů použijte jedinečný název. Přidejte například iniciály nebo zkratku názvu společnosti do podstatných jmen v příkazech.
Při importu příkazů do relace z modulu PowerShellu nebo z jiné relace můžete použít Prefix parametr importu modulu nebo rutinu Import-PSSession k přidání předpony k podstatným jmenům v názvech příkazů.
Následující příkaz například zabrání konfliktům s rutinami Get-Date a Set-Date, které jsou součástí PowerShellu při importu modulu DateFunctions.
Import-Module -Name DateFunctions -Prefix ZZ
Spuštění externích spustitelných souborů
Ve Windows. PowerShell zpracovává přípony souborů uvedené v proměnné prostředí $Env:PATHEXT jako spustitelné soubory. Soubory, které nejsou spustitelné soubory Windows, se předávají systému Windows ke zpracování. Systém Windows vyhledá přidružení souboru a spustí výchozí příkaz prostředí Windows Shell pro příponu. Aby systém Windows podporoval provádění podle přípony souboru, musí být přidružení registrováno v systému.
Spustitelný modul pro příponu souboru můžete zaregistrovat pomocí ftype a assoc příkazů příkazového prostředí CMD. PowerShell nemá žádnou přímou metodu registrace obslužné rutiny souboru. Další informace najdete v dokumentaci k příkazu ftype.
Aby PowerShell viděl příponu souboru jako spustitelný soubor v aktuální relaci, musíte přidat příponu do proměnné prostředí $Env:PATHEXT.