about_Modules
Krátký popis
Vysvětluje, jak nainstalovat, importovat a používat moduly PowerShellu.
Dlouhý popis
PowerShell je příkazové prostředí i skriptovací jazyk. Příkazy v PowerShellu se implementují jako skripty, funkce nebo rutiny. Jazyk obsahuje klíčová slova, která poskytují strukturu a logiku zpracování a další prostředky, jako jsou proměnné, zprostředkovatelé, aliasy.
Modul je samostatná opakovaně použitelná jednotka, která může zahrnovat rutiny, poskytovatele, funkce, proměnné a další prostředky. Ve výchozím nastavení PowerShell automaticky načte nainstalovaný modul při prvním použití příkazu z modulu. Pomocí proměnné $PSModuleAutoloadingPreference
můžete nakonfigurovat chování automatického načítání modulů . Další informace najdete v tématu about_Preference_Variables.
Moduly můžete také načíst nebo uvolnit ručně během relace PowerShellu. K načtení nebo opětovnému načtení modulu použijte Import-Module
. K uvolnění modulu použijte rutinu Remove-Module
.
PowerShell obsahuje základní sadu modulů. Každý může vytvářet nové moduly pomocí jazyka C# nebo samotného skriptovacího jazyka PowerShellu. Moduly napsané v jazyce C# jako kompilovaná sestavení .NET se označují jako nativní moduly. Moduly napsané v PowerShellu se označují jako skriptovací moduly.
Tento článek vysvětluje, jak používat moduly PowerShellu. Informace o tom, jak vytvořit moduly PowerShellu, najdete v tématu Vytvoření modulu PowerShellu.
Poznámka:
Před PowerShellem 3.0 se rutiny a zprostředkovatelé zabalily do modulů snap-in PowerShellu. Počínaje PowerShellem 3.0 se modul snap-in Microsoft.PowerShell.Core ve výchozím nastavení přidá do každé relace. Toto je jediný modul snap-in, který zbývá v PowerShellu. Všechny ostatní moduly snap-in byly převedeny na moduly. Vytváření nových modulů snap-in se už nepodporuje.
Výchozí umístění modulů
PowerShell ukládá moduly do následujících výchozích umístění:
- Ve Windows
- Rozsah všech uživatelů –
$env:ProgramFiles\PowerShell\Modules
- Aktuální obor uživatele –
$HOME\Documents\PowerShell\Modules
- Moduly dodávané pomocí PowerShellu –
$PSHOME\Modules
- Rozsah všech uživatelů –
- V Linuxu a macOS
- Rozsah všech uživatelů –
/usr/local/share/powershell/Modules
- Aktuální obor uživatele –
$HOME/.local/share/powershell/Modules
- Moduly dodávané pomocí PowerShellu –
$PSHOME/Modules
- Rozsah všech uživatelů –
Ve výchozím nastavení Modules
složka pro aktuálního uživatele neexistuje. Pokud jste nainstalovali modul v CurrentUser
oboru pomocí Install-Module
nebo Install-PSResource
, tyto rutiny vytvoří Modules
složku pro aktuálního uživatele. Pokud složka neexistuje, můžete ji vytvořit ručně.
Pomocí následujícího příkazu vytvořte Modules
složku pro aktuálního uživatele:
$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules
Tato umístění se automaticky zahrnou $env:PSModulePath
do proměnné prostředí. Další informace o výchozích umístěních modulů najdete v tématu about_PSModulePath.
Automatické načítání modulů
Při prvním spuštění příkazu z nainstalovaného modulu PowerShell automaticky importuje (načte) tento modul. Modul musí být uložen v umístěních zadaných $env:PSModulePath
v proměnné prostředí.
Automatické načítání modulů umožňuje používat příkazy v modulu bez jakékoli konfigurace nastavení nebo profilu. Každý z následujících příkladů způsobí , že se modul CimCmdlets , který obsahuje Get-CimInstance
, importuje do vaší relace.
Spuštění příkazu
Get-CimInstance Win32_OperatingSystem
Získání příkazu
Get-Command Get-CimInstance
Získání nápovědy k příkazu
Get-Help Get-CimInstance
Pokud používáte Get-Command
se zástupným znakem (*
), PowerShell neimportuje žádné moduly. Pro zjišťování příkazů můžete použít zástupné cardy, aniž byste museli načítat moduly, které možná v relaci nepotřebujete.
Ruční import modulu
Ruční import modulu se vyžaduje, když se modul nenainstaluje v umístěních určených $env:PSModulePath
proměnnou prostředí nebo když je modul poskytován jako samostatný .dll
nebo .psm1
soubor, a ne zabalený modul.
Příkazy, které používají zprostředkovatele PowerShellu, také automaticky neimportuje modul. Pokud například použijete příkaz, který vyžaduje jednotku WSMan:
, například rutinu Get-PSSessionConfiguration
, budete muset spustit Import-Module
rutinu pro import modulu Microsoft.WSMan.Management , který obsahuje jednotku WSMan:
.
Můžete také změnit způsob importu modulu ve vaší relaci. Například parametr Prefix pro Import-Module
přidání výrazné předpony do části podstatných jmen rutin importovaných z modulu. Parametr NoClobber brání modulu v přidávání příkazů, které by skrývaly nebo nahradily existující příkazy v relaci. Další informace najdete v tématu Správa konfliktů názvů.
Následující příklad naimportuje modul BitsTransfer do aktuální relace.
Import-Module BitsTransfer
Pokud chcete importovat modul, který není ve vašem $env:PSModulePath
modulu, použijte plně kvalifikovanou cestu ke složce modulu. Pokud například chcete do relace přidat modul TestCmdlets , C:\ps-test
zadejte:
Import-Module C:\ps-test\TestCmdlets
Pokud chcete importovat soubor modulu, který není obsažen ve složce modulu, použijte plně kvalifikovanou cestu k souboru modulu v příkazu. Pokud například chcete do relace přidat modul TestCmdlets.dll v C:\ps-test
adresáři, zadejte:
Import-Module C:\ps-test\TestCmdlets.dll
Další informace o přidávání modulů do relace najdete v tématu Import-Module.
Import modulu na začátku každé relace
Příkaz Import-Module
naimportuje moduly do aktuální relace PowerShellu. Pokud chcete importovat modul do každé spuštěné relace PowerShellu, přidejte tento Import-Module
příkaz do profilu PowerShellu.
Další informace o profilech najdete v tématu about_Profiles.
Instalace publikovaného modulu
Publikovaný modul je modul, který je k dispozici v registrovaném úložišti, jako je například Galerie prostředí PowerShell. Moduly PowerShellGet a Microsoft.PowerShell.PSResourceGet poskytují rutiny pro hledání, instalaci a publikování modulů PowerShellu do registrovaného úložiště.
Modul PowerShellGet je součástí PowerShellu 5.0 a novějších verzí. Modul Microsoft.PowerShell.PSResourceGet je součástí PowerShellu 7.4 a novějších verzí a je upřednostňovaným správcem balíčků pro PowerShell. Microsoft.PowerShell.PSResourceGet je možné nainstalovat vedle modulu PowerShellGet ve starších verzích PowerShellu. Moduly Install-Module
můžete nainstalovat z Galerie prostředí PowerShell pomocí rutinyInstall-PSResource
.
Get-Command Install-Module, Install-PSResource
CommandType Name Version Source
----------- ---- ------- ------
Function Install-Module 2.9.0 PowerShellGet
Cmdlet Install-PSResource 1.0.0 Microsoft.PowerShell.PSResourceGet
Další informace najdete v tématu Přehled modulu PowerShellGet.
Ruční instalace modulu
Modul můžete nainstalovat ručně zkopírováním obsahu modulu z jiné složky. Tato složka může být v jiném umístění na místním počítači nebo nainstalovaná na jiném počítači. Pokud chcete modul nainstalovat ručně, zkopírujte celou složku modulu do nového umístění, které je součástí vašeho $env:PSModulePath
souboru .
V PowerShellu použijte rutinu Copy-Item
. Například spuštěním následujícího příkazu zkopírujte MyModule
složku z C:\PSTest
:
$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse
Modul můžete nainstalovat do libovolného umístění, ale instalace modulů do výchozího umístění modulu usnadňuje správu.
Vyhledání nainstalovaných modulů
Rutina Get-Module
získá moduly PowerShellu načtené v aktuální relaci PowerShellu.
Get-Module
Uvedené moduly mohou zahrnovat moduly, které byly importovány z libovolného umístění, nejen z $env:PSModulePath
.
Pomocí následujícího příkazu zobrazte seznam modulů nainstalovaných v nástroji $env:PSModulePath
:
Get-Module -ListAvailable
Tento příkaz získá všechny moduly, které jsou nainstalovány , $env:PSModulePath
nejen moduly importované do aktuální relace. Tento příkaz nevypisuje moduly nainstalované v jiných umístěních.
Další informace najdete v tématu Get-Module.
Výpis příkazů v modulu
Pomocí rutiny Get-Command
vyhledejte všechny dostupné příkazy. Pomocí parametrů Get-Command
rutiny můžete filtrovat příkazy, jako je modul, název a podstatné jméno.
Pokud chcete najít všechny příkazy v modulu, zadejte:
Get-Command -Module <module-name>
Pokud chcete například najít příkazy v modulu BitsTransfer , zadejte:
Get-Command -Module BitsTransfer
Další informace o rutině Get-Command
najdete v tématu Get-Command.
Odebrání modulu
Když modul odeberete, příkazy přidaného modulu se z relace odstraní. Například následující příkaz odebere modul BitsTransfer z aktuální relace.
Remove-Module BitsTransfer
Odebrání modulu obrátí operaci importu modulu. Odebráním modulu se modul neodinstaluje. Další informace naleznete v tématu Remove-Module.
Příkazy můžete do relace přidat z modulů a modulů snap-in. Moduly můžou přidávat všechny typy příkazů, včetně rutin, poskytovatelů a funkcí a položek, jako jsou proměnné, aliasy a jednotky PowerShellu. Moduly snap-in můžou přidávat jenom rutiny a poskytovatele.
Před odebráním modulu z relace pomocí následujících příkazů určete, který modul chcete odebrat.
K vyhledání zdroje Get-Date
rutin Get-Help
použijte například následující příkaz:
Get-Command Get-Date, Get-Help -All |
Select-Object -Property Name, CommandType, Module ,PSSnapIn
Následující výstup ukazuje, že rutina Get-Help
je v modulu snap-in Microsoft.PowerShell.Core . Tento modul snap-in nelze z relace odebrat.
Name CommandType Module PSSnapIn
---- ----------- ------ --------
Get-Date Function
Get-Date Cmdlet Microsoft.PowerShell.Utility
Get-Help Cmdlet Microsoft.PowerShell.Core
Existují dva zdroje pro Get-Date
. Jedna je funkce a druhá je rutina v modulu Microsoft.PowerShell.Utility . Modul můžete odebrat pomocí Remove-Module
. Pokud chcete funkci odebrat, můžete ji odstranit z Function:
jednotky.
Remove-Item Function:Get-Date
Další informace o jednotce Function:
najdete v tématu about_Function_Provider.
Správa konfliktů názvů
Ke konfliktům názvů dochází v případě, že více příkazů v relaci má stejný název. Import modulu způsobí konflikt názvů, když příkazy v modulu mají stejné názvy jako příkazy nebo položky v relaci.
Import-Module
může přidávat příkazy, které skrývají a nahrazují příkazy v aktuální relaci. Konflikty názvů můžou vést ke skrytí nebo nahrazení příkazů. Nahrazení příkazu nastane, když importovaný modul obsahuje příkaz se stejným názvem jako existující příkaz v relaci. Nově importovaný příkaz má přednost před existujícím příkazem.
Pokud například relace obsahuje funkci a rutinu se stejným názvem, PowerShell ve výchozím nastavení spustí funkci. Pokud relace obsahuje příkazy stejného typu se stejným názvem, například dvě rutiny se stejným názvem, ve výchozím nastavení spustí naposledy přidaný příkaz.
Další informace, včetně vysvětlení pravidel priority a pokynů pro spouštění skrytých příkazů, najdete v tématu about_Command_Precedence.
Skrytý nebo nahrazený příkaz můžete spustit tak, že kvalifikujete název příkazu. Pokud chcete kvalifikovat název příkazu, přidejte název modulu, který obsahuje požadovanou verzi příkazu. Příklad:
Microsoft.PowerShell.Utility\Get-Date
Spuštění Get-Date
s předponou názvu modulu zajišťuje, že je spuštěna verze z modulu Microsoft.PowerShell.Utility .
Ke zjištění konfliktů názvů použijte parametr All rutiny Get-Command
. Ve výchozím nastavení se načte pouze příkazy, Get-Command
které se spustí při zadání názvu příkazu. Parametr All získá všechny příkazy s konkrétním názvem v relaci.
Chcete-li zabránit konfliktům názvů, použijte parametry NoClobber nebo Prefix rutiny Import-Module
. Parametr Prefix přidá předponu k názvům importovaných příkazů, aby byly v relaci jedinečné. Parametr NoClobber neimportuje žádné příkazy, které by skrývaly nebo nahradily existující příkazy v relaci.
Pomocí parametrů Alias, Rutina, Funkce a Proměnná můžete také vybrat pouze příkazy, které chcete importovat, a můžete vyloučit příkazy, které způsobují konflikty názvů ve vaší Import-Module
relaci.
Autoři modulů můžou zabránit konfliktům názvů pomocí vlastnosti DefaultCommandPrefix manifestu modulu k přidání výchozí předpony ke všem názvům příkazů. Hodnota parametru Prefix má přednost před hodnotou DefaultCommandPrefix.