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 zawierać polecenia cmdlet, dostawców, funkcje, zmienne i inne zasoby, które można zaimportować do sesji programu PowerShell lub dowolnego niestandardowego programu PowerShell.
Zanim funkcjonalność zawarta w module będzie można używać, moduł musi zostać załadowany do sesji programu PowerShell. 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.
Możesz również ręcznie zwolnić lub ponownie załadować moduły podczas sesji programu PowerShell. Aby zwolnić moduł, użyj Remove-Module
polecenia cmdlet . Aby załadować lub ponownie załadować moduł, użyj polecenia Import-Module
.
Program PowerShell zawiera podstawowy zestaw modułów. Każdy może tworzyć nowe polecenia programu PowerShell lub inne zasoby i publikować je jako moduły, które użytkownicy mogą instalować zgodnie z potrzebami.
Moduły w języku C# można pisać jako skompilowane zestawy .NET, znane jako moduły natywne lub w zwykłych modułach programu PowerShell, nazywanych modułami skryptów. W tym temacie 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.
Instalowanie opublikowanego modułu
Opublikowany moduł jest modułem dostępnym z zarejestrowanego repozytorium, takiego 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 lub nowszej. Microsoft.PowerShell.PSResourceGet to nowy preferowany menedżer pakietów dla programu PowerShell i można go zainstalować w poprzednich 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
Jeśli moduł zostanie wyświetlony jako folder z plikami w nim, musisz zainstalować go na komputerze, zanim będzie można go użyć w programie PowerShell.
Program PowerShell zawiera kilka wstępnie zainstalowanych modułów. Na komputerach z systemem Windows wiele funkcji systemu Windows obejmuje moduły do zarządzania funkcją. Te moduły są instalowane po zainstalowaniu funkcji. Inne moduły mogą znajdować się w instalatorze lub programie instalacyjnym, który instaluje moduł.
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\PowerShell\Modules
Skopiuj cały folder modułu do nowego utworzonego folderu. 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 do właśnie utworzonego folderu:
Copy-Item -Path C:\PSTest\MyModule -Destination $folder
Moduł można zainstalować w dowolnej lokalizacji, ale instalowanie modułów w domyślnej lokalizacji modułu ułatwia zarządzanie nimi. 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
. Moduły w innych lokalizacjach muszą być importowane przy użyciu Import-Module
polecenia cmdlet .
Automatyczne ładowanie modułu umożliwia używanie poleceń w module bez konfiguracji konfiguracji konfiguracji lub profilu. Nie ma potrzeby zarządzania modułami po zainstalowaniu ich na komputerze.
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
Możesz użyć Get-Command
polecenia cmdlet listy poleceń we wszystkich zainstalowanych modułach, nawet jeśli nie są jeszcze w sesji. 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.
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.
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ł.
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.
Możesz zaimportować moduł zainstalowany w pliku $env:PSModulePath
, określając nazwę modułu. Na przykład następujące polecenie 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.
Znajdowanie zainstalowanych modułów
Polecenie Get-Module
cmdlet pobiera moduły programu PowerShell, które zostały zaimportowane w sesji.
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 zastępuje 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ć polecenie, które zostało ukryte lub zastąpione przez kwalifikowanie nazwy polecenia. Aby zakwalifikować nazwę polecenia, dodaj nazwę modułu niż 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.