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é $PSModuleAutoloadingPreferencemůž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
  • 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

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:PSModulePathmodulu, 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:PSModulePathsouboru .

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:PSModulePathnejen 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.

Viz také