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-CimInstance
element 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:\PSTest
folderu :
$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:PSModulePath
programu .
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.