Get-Module nie pokazuje zainstalowanych modułów wskazuje, że moduł jest zainstalowany, ale niezaimportowany do bieżącej sesji — trzeba użyć parametru -ListAvailable.
Co oznacza komunikat, że Get-Module nie pokazuje zainstalowanych modułów
Polecenie Get-Module służy przede wszystkim do wyświetlania modułów dostępnych w aktualnie uruchomionej sesji PowerShell. Nie zawsze przedstawia ono pełną zawartość modułów znajdujących się na dysku komputera. W praktyce może więc wystąpić sytuacja, w której moduł został poprawnie zapisany w jednym z katalogów przeznaczonych dla PowerShell, ale nie został jeszcze załadowany do bieżącego procesu. W takim przypadku zwykłe wykonanie Get-Module może zwrócić pusty wynik albo wyświetlić jedynie moduły użyte wcześniej w tej konkretnej sesji.
Rozróżnienie między modułem zainstalowanym, dostępnym i zaimportowanym ma istotne znaczenie. Moduł zainstalowany znajduje się w odpowiednim katalogu, moduł dostępny może zostać odnaleziony przez mechanizmy PowerShell, natomiast moduł zaimportowany jest już aktywny i udostępnia swoje polecenia, funkcje, aliasy lub dostawców. Sam brak modułu na liście wyświetlanej przez podstawowe Get-Module nie musi zatem oznaczać nieudanej instalacji.
Do sprawdzenia modułów obecnych w lokalnych ścieżkach służy polecenie Get-Module -ListAvailable. Można zawęzić wyszukiwanie do konkretnej nazwy, na przykład:
Get-Module -ListAvailable -Name NazwaModulu
Jeżeli moduł zostanie odnaleziony, można załadować go do sesji poleceniem Import-Module NazwaModulu, a następnie ponownie wykonać Get-Module. Warto przy tym pamiętać, że nazwa katalogu, nazwa modułu oraz nazwa polecenia udostępnianego przez moduł nie zawsze są identyczne.
Różnica między modułem zaimportowanym a modułem znalezionym na komputerze
PowerShell korzysta z kilku poziomów widoczności modułów. Bez dodatkowych parametrów Get-Module pokazuje moduły załadowane do bieżącej sesji. Parametr -ListAvailable przeszukuje katalogi wskazane w zmiennej środowiskowej PSModulePath i prezentuje moduły, które mogą zostać zaimportowane. Z kolei Get-Module -ListAvailable | Select-Object Name, Version, Path pozwala szybko porównać nazwy, wersje oraz rzeczywiste lokalizacje plików.
Przykładowy przebieg diagnostyczny może wyglądać następująco:
$env:PSModulePath -split ';'
Get-Module -ListAvailable
Import-Module NazwaModulu -Verbose
Get-Module
Pierwsze polecenie pokazuje katalogi przeszukiwane przez PowerShell. Drugie wyszukuje moduły w tych lokalizacjach. Trzecie importuje wskazany moduł i wyświetla informacje o wykonywanych czynnościach, a ostatnie potwierdza obecność modułu w aktywnej sesji. Takie rozdzielenie etapów pomaga ustalić, czy problem dotyczy instalacji, ścieżki wyszukiwania, importowania, czy samego polecenia.
Znaczenie ma także wersja PowerShell. Moduł może być dostępny w środowisku Windows PowerShell, ale niewidoczny w PowerShell uruchomionym w innej wersji lub na innej platformie. Różnice mogą wynikać również z architektury procesu, uprawnień użytkownika oraz instalacji modułu tylko dla jednego konta. W razie potrzeby można sprawdzić wersję środowiska poleceniem $PSVersionTable, a następnie porównać ją z wymaganiami danego modułu.
Jeżeli kilka wersji modułu znajduje się w różnych katalogach, PowerShell może wybrać inną wersję niż oczekiwana. Weryfikację można przeprowadzić przez odczyt ścieżek zwróconych przez Get-Module -ListAvailable oraz jawne wskazanie wersji podczas importu:
Import-Module NazwaModulu -RequiredVersion 1.2.3
Warto stosować dokładny numer wersji tylko wtedy, gdy jest rzeczywiście znany i obecny na komputerze. W przeciwnym razie bezpieczniej jest najpierw odczytać dostępne warianty i dopiero później określić właściwy sposób importowania.
Typowe przyczyny pustego wyniku i błędów importowania
Jedną z częstszych przyczyn jest użycie niewłaściwego polecenia do weryfikacji. Get-Module bez parametrów nie pełni funkcji pełnego wyszukiwarki instalacji, dlatego pusty wynik może być prawidłowym zachowaniem przed importem modułu. Innym powodem bywa zapisanie modułu w katalogu, którego nie obejmuje PSModulePath. W takiej sytuacji pliki mogą znajdować się na dysku, ale PowerShell nie będzie wiedział, gdzie ich szukać.
W diagnostyce należy zwrócić uwagę na następujące obszary:
- czy nazwa modułu została wpisana poprawnie i z zachowaniem właściwej pisowni,
- czy moduł znajduje się w katalogu zwracanym przez
$env:PSModulePath, - czy folder modułu zawiera plik manifestu lub główny plik modułu o prawidłowej nazwie,
- czy uruchomiona sesja ma dostęp do lokalizacji, w której zapisano moduł,
- czy wersja modułu współpracuje z używaną wersją PowerShell,
- czy polityka wykonywania skryptów nie blokuje plików modułu,
- czy import nie kończy się błędem zależności albo brakującego komponentu.
Problemy mogą pojawić się także wtedy, gdy moduł został zapisany w katalogu użytkownika, a polecenie jest wykonywane z konta systemowego lub innego profilu. Odwrotna sytuacja również jest możliwa: moduł zainstalowany dla wszystkich użytkowników może wymagać uruchomienia odpowiedniej sesji z uprawnieniami umożliwiającymi odczyt plików. Samo skopiowanie folderu modułu nie gwarantuje poprawnej instalacji, ponieważ niektóre moduły korzystają z zależności, dodatkowych bibliotek lub ustawień zapisanych poza głównym katalogiem.
Pomocne jest użycie poleceń kontrolnych, takich jak:
Get-Command -Module NazwaModulu
Get-Module -ListAvailable -Name NazwaModulu | Format-List *
Import-Module NazwaModulu -ErrorAction Stop
Get-Command -Module pokazuje polecenia udostępnione przez zaimportowany moduł. Szczegółowy format wyniku może ujawnić ścieżkę, wersję i typ modułu, a -ErrorAction Stop pozwala zatrzymać wykonanie przy błędzie i jednoznaczniej uchwycić przyczynę. Jeżeli moduł jest widoczny na liście dostępnych, lecz nie daje się zaimportować, należy przeanalizować pełny komunikat błędu zamiast ponownie instalować go bez rozpoznania problemu.
Kiedy warto oddać urządzenie do diagnozy - Get-Module nie pokazuje zainstalowanych modułów
Zgłoszenie do serwisu jest uzasadnione, gdy moduł znika po ponownym uruchomieniu komputera, działa wyłącznie na jednym koncie, jest widoczny w jednej konsoli, lecz nie w innej, albo import kończy się komunikatem o braku uprawnień, zależności lub niezgodności wersji. Warto przekazać nazwę modułu, używaną wersję PowerShell, wynik Get-Module -ListAvailable, zawartość PSModulePath oraz pełny tekst błędu. Takie informacje ułatwiają odtworzenie warunków i ograniczają ryzyko przypadkowego usunięcia działających elementów środowiska.
Pomoc techniczna Warszawskiego Pogotowia Komputerowego 24/7 obejmuje analizę konfiguracji laptopów i komputerów PC, w tym problemów z uruchamianiem narzędzi systemowych, ścieżkami modułów oraz uprawnieniami użytkownika. W pierwszej kolejności można ustalić, czy przyczyną jest brak importu, błędna lokalizacja, konflikt wersji, uszkodzone pliki lub ograniczenia konta. Przed zmianami warto wykonać kopię istotnych skryptów i nie usuwać ręcznie katalogów modułów, jeśli nie ma pewności, z jakich zadań korzysta dane środowisko.
Jeżeli Get-Module -ListAvailable nie znajduje modułu, należy sprawdzić jego instalację oraz katalogi wyszukiwania. Jeżeli moduł jest widoczny, lecz nie działa po użyciu Import-Module, dalsza diagnoza powinna objąć zależności, zgodność wersji, politykę wykonywania i uprawnienia. Takie uporządkowanie pozwala odróżnić zwykłe niezaimportowanie modułu od rzeczywistej usterki systemu lub konfiguracji PowerShell.