Sdílet prostřednictvím


about_Modules

Krátký popis

Vysvětluje, jak nainstalovat, importovat a používat moduly PowerShellu.

Dlouhý popis

PowerShell je skriptovací jazyk a příkazové prostředí. Jazyk se skládá z klíčových slov, která poskytují strukturu a logiku zpracování, a příkazů, které vykonávají práci. Příkazy v PowerShellu se implementují jako skripty, funkce nebo rutiny.

Modul je samostatná opakovaně použitelná jednotka, která může obsahovat rutiny, poskytovatele, funkce, proměnné a další typy prostředků, které lze importovat jako jednu jednotku.

PowerShell je dodáván se základní sadou modulů. Podle potřeby můžete také nainstalovat další moduly. Ve výchozím nastavení se nainstalované moduly načtou automaticky při prvním použití příkazu z modulu. Pomocí proměnné $PSModuleAutoloadingPreference povolíte, zakážete a nakonfigurujete automatické načítání modulů. Další informace najdete v části about_Preference_Variables.

Během relace můžete uvolnit nebo znovu načíst. Pomocí rutiny Remove-Module uvolněte modul z relace. K načtení modulu použijte rutinu Import-Module .

Moduly lze vytvářet jako zkompilovaná sestavení .NET napsaná v jazyce C# nebo moduly založené na skriptech napsané v PowerShellu. Toto téma vysvětluje, jak používat moduly PowerShell. Informace o tom, jak psát moduly PowerShell, najdete v tématu Zápis modulu PowerShellu.

Poznámka:

Před PowerShellem 3.0 byly rutiny a zprostředkovatelé baleny do snap-inů PowerShellu. Počínaje PowerShellem 3.0 je snap-in Microsoft.PowerShell.Core ve výchozím nastavení přidáván do každé relace. Toto je jediný modul snap-in, který zbývá v PowerShellu. Všechny ostatní snap-iny byly převedeny na moduly. Vytváření nových modulů snap-in se už nepodporuje.

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í. Microsoft.PowerShell.PSResourceGet je nový upřednostňovaný správce balíčků pro PowerShell a dá se nainstalovat do předchozích verzí PowerShellu. K instalaci modulů z PowerShell Gallery použijte rutinu Install-Module nebo Install-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

Pokud obdržíte modul jako složku se soubory, musíte jej nainstalovat do počítače, abyste jej mohli používat v PowerShellu.

PowerShell je dodáván s několika předinstalovanými moduly. V počítačích se systémem Windows obsahuje mnoho funkcí systému Windows moduly pro správu této funkce. Tyto moduly se nainstalují při instalaci funkce. Další moduly mohou být dodávány v instalačním programu nebo instalačním programu, který modul nainstaluje.

Ve výchozím nastavení neexistuje složka Modules pro aktuálního uživatele. Pokud jste modul nainstalovali do oboru CurrentUser pomocí Install-Module nebo Install-PSResource, vytvoří tyto rutiny pro aktuálního uživatele složku Modules. 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

Zkopírujte celou složku modulu do nově vytvořené složky. V PowerShellu použijte rutinu Copy-Item. Spuštěním následujícího příkazu například zkopírujte MyModule složku z C:\PSTest do složky, kterou jste právě vytvořili:

Copy-Item -Path C:\PSTest\MyModule -Destination $folder

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. 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 v proměnné prostředí $env:PSModulePath. Moduly v jiných umístěních je nutné importovat pomocí rutiny Import-Module .

Automatické načítání modulů umožňuje používat příkazy v modulu bez jakékoli konfigurace nastavení nebo profilu. Po instalaci modulů do počítače není třeba je spravovat.

Každý z následujících příkladů způsobí import modulu CimCmdlets , který obsahuje Get-CimInstance, 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
    

Pomocí rutiny Get-Command můžete vypsat příkazy ve všech nainstalovaných modulech, a to i v případě, že ještě nejsou v relaci. Pokud používáte Get-Command se zástupným znakem (*), PowerShell neimportuje žádné moduly. Zástupné znaky můžete použít pro zjišťování příkazů bez načítání modulů, které v relaci možná nebudete potřebovat.

Také příkazy, které používají zprostředkovatele PowerShellu, automaticky neimportují modul. Pokud například používáte příkaz, který vyžaduje jednotku WSMan:, jako je například rutina Get-PSSessionConfiguration, budete možná muset spustit rutinu Import-Module pro import modulu Microsoft.WSMan.Management, který obsahuje jednotku WSMan:.

Ruční import modulu

Ruční import modulu se vyžaduje v případě, že modul není nainstalovaný v umístěních určených proměnnou prostředí $env:PSModulePath nebo když je modul poskytován jako samostatný .dll nebo .psm1 soubor, a ne jako zabalený modul.

Můžete také změnit způsob, jakým je modul importován během relace. Například parametr PrefixImport-Module přidá k části podstatných jmen rutin importovaných z modulu výraznou předponu. Parametr NoClobber zabraňuje modulu přidávat příkazy, které by skrývaly nebo nahradily existující příkazy v relaci. Další informace najdete v tématu Správa konfliktů názvů.

Modul, který je nainstalován ve vašem $env:PSModulePath počítači, můžete importovat zadáním názvu modulu. Například následující příkaz importuje modul BitsTransfer do aktuální relace.

Import-Module BitsTransfer

Pokud chcete importovat modul, který není ve vašem $env:PSModulePath, použijte plně kvalifikovanou cestu ke složce modulu. Pokud chcete například do relace přidat modul TestCmdlets v adresáři 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 chcete například do relace přidat modul TestCmdlets.dll v adresáři C:\ps-test, zadejte:

Import-Module C:\ps-test\TestCmdlets.dll

Další informace o přidávání modulů do relace naleznete v tématu Import-Module.

Import modulu na začátku každé relace

Příkaz Import-Module importuje moduly do vaší aktuální relace v PowerShellu. Pokud chcete importovat modul do každé spuštěné relace PowerShellu, přidejte do profilu PowerShellu příkaz Import-Module.

Další informace o profilech, viz about_Profiles.

Vyhledání nainstalovaných modulů

Rutina Get-Module získá moduly PowerShellu, které byly importovány do vaší relace.

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 $env:PSModulePath:

Get-Module -ListAvailable

Tento příkaz získá všechny moduly nainstalované v $env:PSModulePath, a nejen moduly importované do aktuální relace. Tento příkaz nevypisuje moduly nainstalované v jiných umístěních.

Další informace naleznete v části Get-Module.

Výpis příkazů v modulu

Pomocí rutiny Get-Command vyhledejte všechny dostupné příkazy. Pomocí parametrů rutiny Get-Command můžete filtrovat příkazy podle modulu, názvu a druhu.

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 naleznete 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 najdete v tématu Remove-Module.

Příkazy můžete do relace přidat z modulů a 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 diskové 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 a 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. Chcete-li funkci odebrat, můžete ji odstranit z jednotky Function:.

Remove-Item Function:Get-Date

Další informace o jednotce Function: naleznete v tématu o funkci poskytovatele.

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řidat příkazy, které skryjí a nahradí 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 Nahradit má přednost před stávají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.

Příkaz, který byl skryt nebo nahrazen, můžete spustit kvalifikováním názvu příkazu. Chcete-li kvalifikovat název příkazu, přidejte název modulu, který obsahuje verzi požadovaného příkazu. Například:

Microsoft.PowerShell.Utility\Get-Date

Spuštění Get-Date s předponou názvu modulu zajišťuje, že je spuštěná verze z modulu Microsoft.PowerShell.Utility.

Pro zjištění konfliktů názvů použijte parametr All příkazu Get-Command. Ve výchozím nastavení Get-Command získá pouze příkazy, 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 rámci sezení jedinečné. Parametr NoClobber neimportuje žádné příkazy, které by skrývaly nebo nahradily existující příkazy v relaci.

Můžete také použít alias, rutiny, funkcea parametry proměnnéImport-Module vybrat pouze příkazy, které chcete importovat, a můžete vyloučit příkazy, které způsobují konflikty názvů v relaci.

Autoři modulů můžou zabránit konfliktům názvů pomocí vlastnosti DefaultCommandPrefix manifestu modulu a přidat výchozí předponu ke všem názvům příkazů. Hodnota parametru Prefix má přednost před hodnotou DefaultCommandPrefix.

Viz také