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říkazy, které tuto práci provádějí. Příkazy v PowerShellu se implementují jako skripty, funkce nebo rutiny.

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

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

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

Moduly lze vytvořit jako kompilovaná sestavení .NET napsaná v jazyce C# nebo moduly založené na skriptech napsaných v PowerShellu. Toto téma vysvětluje, jak používat moduly PowerShellu. Informace o tom, jak psát moduly PowerShellu, najdete v tématu Psaní 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.

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 v předchozí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

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

PowerShell obsahuje několik předinstalovaných modulů. Na 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 můžou být součástí instalačního programu nebo instalačního programu, který modul nainstaluje.

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

Zkopírujte celou složku modulu do nové vytvořené složky. V PowerShellu použijte rutinu Copy-Item . Spusťte například následující příkaz, který zkopíruje MyModule složku ze C:\PSTest 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 $env:PSModulePath v proměnné prostředí. Moduly v jiných umístěních musí být importovány 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í nutné spravovat moduly.

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
    

Pomocí seznamu rutin můžete příkazy ve všech nainstalovaných modulech použít Get-Command , i když ještě nejsou v relaci. 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.

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

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.

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ů.

Modul, který je nainstalovaný ve vašem počítači $env:PSModulePath , můžete importovat zadáním názvu modulu. Například následující příkaz 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.

Vyhledání nainstalovaných modulů

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

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 nahrazuje 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.

Můžete spustit příkaz, který je skrytý nebo nahrazený opravňujícím názvem 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é