Udostępnij za pośrednictwem


O_modułach

Krótki opis

Objaśnienie sposobu instalowania, importowania i używania modułów programu PowerShell.

Długi opis

Program PowerShell jest zarówno powłoką poleceń, jak i językiem skryptów. Polecenia w programie PowerShell są implementowane jako skrypty, funkcje lub polecenia cmdlet. Język zawiera słowa kluczowe, które zapewniają strukturę i logikę przetwarzania oraz inne zasoby, takie jak zmienne, dostawcy, aliasy.

Moduł to samodzielna jednostka wielokrotnego użytku, która może obejmować polecenia cmdlet, dostawców, funkcje, zmienne i inne zasoby. Domyślnie program PowerShell automatycznie ładuje zainstalowany moduł przy pierwszym użyciu polecenia z modułu. Zachowanie automatycznego ładowania modułu można skonfigurować przy użyciu zmiennej $PSModuleAutoloadingPreference. Aby uzyskać więcej informacji, zobacz about_Preference_Variables.

Moduły można również ładować ręcznie lub zwalniać podczas sesji programu PowerShell. Aby załadować lub ponownie załadować moduł, użyj polecenia Import-Module. Aby zwolnić moduł, użyj Remove-Module polecenia cmdlet .

Program PowerShell zawiera podstawowy zestaw modułów. Każdy może tworzyć nowe moduły przy użyciu języka C# lub języka skryptów programu PowerShell. Moduły napisane w języku C# jako skompilowane zestawy platformy .NET są nazywane modułami natywnymi. Moduły napisane w programie PowerShell są nazywane modułami skryptów.

W tym artykule wyjaśniono, jak używać modułów programu PowerShell. Aby uzyskać informacje na temat tworzenia modułów programu PowerShell, zobacz Pisanie modułu programu PowerShell.

Uwaga

Przed programem PowerShell 3.0 polecenia cmdlet i dostawcy zostali spakowane w przystawkach programu PowerShell. Począwszy od programu PowerShell 3.0, przystawka Microsoft.PowerShell.Core jest domyślnie dodawana do każdej sesji. Jest to jedyna przystawka pozostała w programie PowerShell. Wszystkie inne przystawki zostały przekonwertowane na moduły. Tworzenie nowych przystawek nie jest już obsługiwane.

Domyślne lokalizacje modułów

Program PowerShell przechowuje moduły w następujących lokalizacjach domyślnych:

  • Zakres wszystkich użytkowników — $env:ProgramFiles\WindowsPowerShell\Modules
  • Bieżący zakres użytkownika — $HOME\Documents\WindowsPowerShell\Modules
  • Moduły dostarczane z programem PowerShell — $PSHOME\Modules

Domyślnie Modules folder bieżącego użytkownika nie istnieje. Jeśli moduł został zainstalowany w CurrentUser zakresie przy użyciu polecenia Install-Module lub Install-PSResource, te polecenia cmdlet tworzą Modules folder dla bieżącego użytkownika. Jeśli folder nie istnieje, możesz utworzyć go ręcznie.

Użyj następującego polecenia, aby utworzyć Modules folder dla bieżącego użytkownika:

$folder = New-Item -Type Directory -Path $HOME\Documents\WindowsPowerShell\Modules

Te lokalizacje są automatycznie uwzględniane w zmiennej środowiskowej $env:PSModulePath . Aby uzyskać więcej informacji na temat domyślnych lokalizacji modułów, zobacz about_PSModulePath.

Automatyczne ładowanie modułu

Przy pierwszym uruchomieniu polecenia z zainstalowanego modułu program PowerShell automatycznie importuje (ładuje) ten moduł. Moduł musi być przechowywany w lokalizacjach określonych w zmiennej środowiskowej $env:PSModulePath .

Automatyczne ładowanie modułu umożliwia używanie poleceń w module bez konfiguracji konfiguracji konfiguracji lub profilu. Każdy z poniższych przykładów powoduje zaimportowanie modułu CimCmdlets zawierającego Get-CimInstanceelement do sesji.

  • Uruchamianie polecenia

    Get-CimInstance Win32_OperatingSystem
    
  • Pobierz polecenie

    Get-Command Get-CimInstance
    
  • Uzyskiwanie pomocy dotyczącej polecenia

    Get-Help Get-CimInstance
    

W przypadku użycia Get-Command z symbolem wieloznacznymi (*) program PowerShell nie importuje żadnych modułów. Symbole wieloznaczne można używać do odnajdywania poleceń bez ładowania modułów, które mogą nie być potrzebne w sesji.

Ręczne importowanie modułu

Ręczne importowanie modułu jest wymagane, gdy moduł nie jest zainstalowany w lokalizacjach określonych przez $env:PSModulePath zmienną środowiskową lub gdy moduł jest dostarczany jako autonomiczny .dll lub .psm1 plik, a nie spakowany moduł.

Ponadto polecenia korzystające z dostawców programu PowerShell nie importują automatycznie modułu. Jeśli na przykład używasz polecenia wymagającego WSMan: dysku, takiego jak Get-PSSessionConfiguration polecenie cmdlet, może być konieczne uruchomienie Import-Module polecenia cmdlet w celu zaimportowania modułu Microsoft.WSMan.Management zawierającego WSMan: dysk.

Możesz również zmienić sposób importowania modułu w sesji. Na przykład parametr Import-Module Prefix polecenia dodaje charakterystyczny prefiks do rzeczownika części poleceń cmdlet zaimportowanych z modułu. Parametr NoClobber uniemożliwia modułowi dodawanie poleceń, które ukrywają lub zastępują istniejące polecenia w sesji. Aby uzyskać więcej informacji, zobacz Zarządzanie konfliktami nazw.

Poniższy przykład importuje moduł BitsTransfer do bieżącej sesji.

Import-Module BitsTransfer

Aby zaimportować moduł, który nie znajduje się w pliku $env:PSModulePath, użyj w pełni kwalifikowanej ścieżki do folderu modułu. Aby na przykład dodać moduł TestCmdlets w C:\ps-test katalogu do sesji, wpisz:

Import-Module C:\ps-test\TestCmdlets

Aby zaimportować plik modułu, który nie znajduje się w folderze modułu, użyj w pełni kwalifikowanej ścieżki do pliku modułu w poleceniu . Aby na przykład dodać moduł TestCmdlets.dll w C:\ps-test katalogu do sesji, wpisz:

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

Aby uzyskać więcej informacji na temat dodawania modułów do sesji, zobacz Import-Module.

Importowanie modułu na początku każdej sesji

Polecenie Import-Module importuje moduły do bieżącej sesji programu PowerShell. Aby zaimportować moduł do każdej uruchomionej sesji programu PowerShell, dodaj Import-Module polecenie do profilu programu PowerShell.

Aby uzyskać więcej informacji na temat profilów, zobacz about_Profiles.

Instalowanie opublikowanego modułu

Opublikowany moduł jest modułem dostępnym w zarejestrowanym repozytorium, takim jak Galeria programu PowerShell. Moduły PowerShellGet i Microsoft.PowerShell.PSResourceGet udostępniają polecenia cmdlet do znajdowania, instalowania i publikowania modułów programu PowerShell w zarejestrowanym repozytorium.

Moduł PowerShellGet jest dołączony do wersji programu PowerShell 5.0 i nowszych. Moduł Microsoft.PowerShell.PSResourceGet jest dołączony do wersji programu PowerShell 7.4 i nowszych oraz jest preferowanym menedżerem pakietów dla programu PowerShell. Moduł Microsoft.PowerShell.PSResourceGet można zainstalować obok modułu PowerShellGet w starszych wersjach programu PowerShell. Użyj polecenia Install-Module cmdlet lubInstall-PSResource, aby zainstalować moduły z Galeria programu PowerShell.

 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

Aby uzyskać więcej informacji, zobacz PowerShellGet Overview (Omówienie programu PowerShellGet).

Ręczne instalowanie modułu

Moduł można zainstalować ręcznie, kopiując zawartość modułu z innego folderu. Ten folder może znajdować się w innej lokalizacji na komputerze lokalnym lub zainstalowanym na innym komputerze. Aby ręcznie zainstalować moduł, skopiuj cały folder modułu do nowej lokalizacji zawartej w pliku $env:PSModulePath.

W programie PowerShell użyj Copy-Item polecenia cmdlet . Uruchom na przykład następujące polecenie, aby skopiować MyModule folder z C:\PSTestfolderu :

$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse

Moduł można zainstalować w dowolnej lokalizacji, ale instalowanie modułów w domyślnej lokalizacji modułu ułatwia zarządzanie nimi.

Znajdowanie zainstalowanych modułów

Polecenie Get-Module cmdlet pobiera moduły programu PowerShell, które są ładowane w bieżącej sesji programu PowerShell.

Get-Module

Wymienione moduły mogą zawierać moduły zaimportowane z dowolnej lokalizacji, a nie tylko z $env:PSModulePathprogramu .

Użyj następującego polecenia, aby wyświetlić listę modułów zainstalowanych w pliku $env:PSModulePath:

Get-Module -ListAvailable

To polecenie pobiera wszystkie moduły zainstalowane w programie $env:PSModulePath, a nie tylko moduły zaimportowane do bieżącej sesji. To polecenie nie wyświetla listy modułów zainstalowanych w innych lokalizacjach.

Aby uzyskać więcej informacji, zobacz Get-Module.

Wyświetlanie listy poleceń w module

Get-Command Użyj polecenia cmdlet , aby znaleźć wszystkie dostępne polecenia. Możesz użyć parametrów Get-Command polecenia cmdlet, aby filtrować polecenia, takie jak moduł, nazwa i noun.

Aby znaleźć wszystkie polecenia w module, wpisz:

Get-Command -Module <module-name>

Aby na przykład znaleźć polecenia w module BitsTransfer , wpisz:

Get-Command -Module BitsTransfer

Aby uzyskać więcej informacji na temat Get-Command polecenia cmdlet, zobacz Get-Command.

Usuń moduł

Po usunięciu modułu polecenia dodane przez moduł zostaną usunięte z sesji. Na przykład następujące polecenie usuwa moduł BitsTransfer z bieżącej sesji.

Remove-Module BitsTransfer

Usunięcie modułu odwraca operację importowania modułu. Usunięcie modułu nie powoduje odinstalowania modułu. Aby uzyskać więcej informacji, zobacz Remove-Module (Usuwanie modułu).

Polecenia można dodawać do sesji z modułów i przystawek. Moduły mogą dodawać wszystkie typy poleceń, w tym poleceń cmdlet, dostawców i funkcji oraz elementów, takich jak zmienne, aliasy i dyski programu PowerShell. Przystawki mogą dodawać tylko polecenia cmdlet i dostawców.

Przed usunięciem modułu z sesji użyj następujących poleceń, aby określić moduł, który chcesz usunąć.

Na przykład użyj następującego polecenia, aby znaleźć źródło Get-Date poleceń cmdlet i Get-Help :

Get-Command Get-Date, Get-Help -All |
    Select-Object -Property Name, CommandType, Module ,PSSnapIn

Następujące dane wyjściowe pokazują, że Get-Help polecenie cmdlet znajduje się w przystawce Microsoft.PowerShell.Core . Nie można usunąć tej przystawki z sesji.

Name     CommandType Module                       PSSnapIn
----     ----------- ------                       --------
Get-Date    Function
Get-Date      Cmdlet Microsoft.PowerShell.Utility
Get-Help      Cmdlet                              Microsoft.PowerShell.Core

Istnieją dwa źródła dla elementu Get-Date. Jedna z nich jest funkcją, a druga to polecenie cmdlet w module Microsoft.PowerShell.Utility . Moduł można usunąć przy użyciu polecenia Remove-Module. Aby usunąć funkcję, możesz usunąć ją z Function: dysku.

Remove-Item Function:Get-Date

Aby uzyskać więcej informacji na temat Function: dysku, zobacz about_Function_Provider.

Zarządzanie konfliktami nazw

Konflikty nazw występują, gdy więcej niż jedno polecenie w sesji ma taką samą nazwę. Importowanie modułu powoduje konflikt nazw, gdy polecenia w module mają takie same nazwy jak polecenia lub elementy w sesji.

Import-Module może dodawać polecenia, które ukrywają i zastępują polecenia w bieżącej sesji. Konflikty nazw mogą spowodować ukrycie lub zastąpienie poleceń. Zastąpienie polecenia występuje, gdy zaimportowany moduł zawiera polecenie o takiej samej nazwie jak istniejące polecenie w sesji. Nowo zaimportowane polecenie ma pierwszeństwo przed istniejącym poleceniem.

Na przykład gdy sesja zawiera funkcję i polecenie cmdlet o tej samej nazwie, program PowerShell domyślnie uruchamia funkcję. Gdy sesja zawiera polecenia tego samego typu o tej samej nazwie, takie jak dwa polecenia cmdlet o tej samej nazwie, domyślnie uruchamia ostatnio dodane polecenie.

Aby uzyskać więcej informacji, w tym wyjaśnienie reguł pierwszeństwa i instrukcje dotyczące uruchamiania ukrytych poleceń, zobacz about_Command_Precedence.

Możesz uruchomić ukryte lub zastąpione polecenie, kwalifikując nazwę polecenia. Aby zakwalifikować nazwę polecenia, dodaj nazwę modułu, który zawiera wersję żądanego polecenia. Na przykład:

Microsoft.PowerShell.Utility\Get-Date

Uruchomienie Get-Date z prefiksem nazwy modułu gwarantuje, że jest uruchomiona wersja z modułu Microsoft.PowerShell.Utility .

Aby wykryć konflikty nazw, użyj parametru All polecenia Get-Command cmdlet. Domyślnie Get-Command pobiera tylko te polecenia uruchamiane podczas wpisywania nazwy polecenia. Parametr All pobiera wszystkie polecenia o określonej nazwie w sesji.

Aby zapobiec konfliktom nazw, użyj parametrów NoClobber lub Prefiks polecenia Import-Module cmdlet. Parametr Prefiks dodaje prefiks do nazw importowanych poleceń, aby były unikatowe w sesji. Parametr NoClobber nie importuje żadnych poleceń, które ukrywają lub zastępują istniejące polecenia w sesji.

Można również użyć aliasu, polecenia cmdlet, funkcji i zmiennej parametrówImport-Module, aby wybrać tylko polecenia, które chcesz zaimportować, i można wykluczyć polecenia, które powodują konflikty nazw w sesji.

Autorzy modułów mogą zapobiegać konfliktom nazw przy użyciu właściwości DefaultCommandPrefix manifestu modułu w celu dodania domyślnego prefiksu do wszystkich nazw poleceń. Wartość parametru Prefix ma pierwszeństwo przed wartością DefaultCommandPrefix.

Zobacz też