Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Korte beschrijving
Hierin wordt uitgelegd hoe u PowerShell-modules installeert, importeert en gebruikt.
Lange beschrijving
PowerShell is zowel een opdrachtshell als een scripttaal. Opdrachten in PowerShell worden geïmplementeerd als scripts, functies of cmdlets. De taal bevat trefwoorden, die de structuur en logica van de verwerking bieden, en andere resources, zoals variabelen, providers, aliassen.
Een module is een zelfstandige, herbruikbare eenheid die cmdlets, providers, functies, variabelen en andere resources kan bevatten. Standaard wordt in PowerShell automatisch een geïnstalleerde module geladen wanneer u voor het eerst een opdracht uit de module gebruikt. U kunt het laadgedrag van automatische modules configureren met behulp van de variabele $PSModuleAutoLoadingPreference. Zie about_Preference_Variablesvoor meer informatie.
U kunt modules ook handmatig laden of lossen tijdens een PowerShell-sessie. Gebruik Import-Moduleom een module te laden of opnieuw te laden. Als u een module wilt uitladen, gebruikt u de Remove-Module-cmdlet.
PowerShell bevat een basisset modules. Iedereen kan nieuwe modules maken met C# of de PowerShell-scripttaal zelf. Modules die zijn geschreven in C# als gecompileerde .NET-assembly's worden systeemeigen modules genoemd. Modules die zijn geschreven in PowerShell worden scriptmodules genoemd.
In dit artikel wordt uitgelegd hoe u PowerShell-modules gebruikt. Zie Een PowerShell-module schrijvenvoor meer informatie over het maken van PowerShell-modules.
Notitie
Vóór PowerShell 3.0 werden cmdlets en providers verpakt in PowerShell-modules. Vanaf PowerShell 3.0 wordt de module Microsoft.PowerShell.Core standaard toegevoegd aan elke sessie. Dit is de enige snap-in die nog over is in PowerShell. Alle andere snap-ins zijn omgezet naar modules. Het maken van nieuwe snap-ins wordt niet meer ondersteund.
Standaardmodulelocaties
PowerShell slaat modules op op de volgende standaardlocaties:
- Op Windows
- Bereik van alle gebruikers -
$Env:ProgramFiles\PowerShell\Modules - Huidig gebruikersbereik -
$HOME\Documents\PowerShell\Modules - Modules die zijn geleverd met PowerShell -
$PSHOME\Modules
- Bereik van alle gebruikers -
- Op Linux en macOS
- Bereik van alle gebruikers -
/usr/local/share/powershell/Modules - Huidig gebruikersbereik -
$HOME/.local/share/powershell/Modules - Modules die zijn geleverd met PowerShell -
$PSHOME/Modules
- Bereik van alle gebruikers -
De Modules map voor de huidige gebruiker bestaat standaard niet. Als u een module in het CurrentUser bereik hebt geïnstalleerd met behulp van Install-Module of Install-PSResource, maken deze cmdlets de Modules map voor de huidige gebruiker. Als de map niet bestaat, kunt u deze handmatig maken.
Gebruik de volgende opdracht om een Modules map voor de huidige gebruiker te maken:
$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules
Deze locaties worden automatisch opgenomen in de omgevingsvariabele $Env:PSModulePath. Zie about_PSModulePathvoor meer informatie over de standaardmodulelocaties.
Module automatisch laden
De eerste keer dat u een opdracht uitvoert vanuit een geïnstalleerde module, importeert PowerShell die module automatisch (laadt). De module moet worden opgeslagen op de locaties die zijn opgegeven in de omgevingsvariabele $Env:PSModulePath.
Met automatisch laden van modules kunt u opdrachten in een module gebruiken zonder installatie of profielconfiguratie. Elk van de volgende voorbeelden zorgt ervoor dat de CimCmdlets module, die Get-CimInstancebevat, worden geïmporteerd in uw sessie.
Voer de opdracht uit
Get-CimInstance Win32_OperatingSystemOpdracht verkrijgen
Get-Command Get-CimInstanceHulp bij de opdracht krijgen
Get-Help Get-CimInstance
Wanneer u Get-Command gebruikt met een jokerteken (*), worden in PowerShell geen modules geïmporteerd. U kunt jokertekens gebruiken voor opdrachtdetectie zonder modules te laden die u mogelijk niet nodig hebt in uw sessie.
Een module handmatig importeren
Handmatig importeren van een module is vereist wanneer een module niet is geïnstalleerd op de locaties die zijn opgegeven door de omgevingsvariabele $Env:PSModulePath of wanneer de module wordt geleverd als een zelfstandig .dll- of .psm1-bestand, in plaats van een verpakte module.
Opdrachten die gebruikmaken van PowerShell-providers importeren ook niet automatisch een module. Als u bijvoorbeeld een opdracht gebruikt waarvoor het WSMan:-station is vereist, zoals de Get-PSSessionConfiguration-cmdlet, moet u mogelijk de Import-Module-cmdlet uitvoeren om de Microsoft.WSMan.Management-module met het WSMan:-station te importeren.
Mogelijk wilt u ook wijzigen hoe de module in uw sessie wordt geïmporteerd. De parameter Prefix van Import-Module voegt bijvoorbeeld een onderscheidend voorvoegsel toe aan het zelfstandig naamwoordgedeelte van de cmdlets die zijn geïmporteerd uit de module. De parameter NoClobber voorkomt dat de module opdrachten toevoegt die bestaande opdrachten in de sessie verbergen of vervangen. Zie Naamconflicten beherenvoor meer informatie.
In het volgende voorbeeld wordt de module BitsTransfer geïmporteerd in de huidige sessie.
Import-Module BitsTransfer
Als u een module wilt importeren die zich niet in uw $Env:PSModulePathbevindt, gebruikt u het volledig gekwalificeerde pad naar de modulemap. Als u bijvoorbeeld de module TestCmdlets in de map C:\ps-test wilt toevoegen aan uw sessie, typt u:
Import-Module C:\ps-test\TestCmdlets
Als u een modulebestand wilt importeren dat zich niet in een modulemap bevindt, gebruikt u het volledig gekwalificeerde pad naar het modulebestand in de opdracht. Als u bijvoorbeeld de TestCmdlets.dll-module in de map C:\ps-test wilt toevoegen aan uw sessie, typt u:
Import-Module C:\ps-test\TestCmdlets.dll
Zie Import-Modulevoor meer informatie over het toevoegen van modules aan uw sessie.
Een module importeren aan het begin van elke sessie
Met de opdracht Import-Module worden modules geïmporteerd in uw huidige PowerShell-sessie. Als u een module wilt importeren in elke PowerShell-sessie die u start, voegt u de Import-Module opdracht toe aan uw PowerShell-profiel.
Zie about_Profilesvoor meer informatie over profielen.
Een gepubliceerde module installeren
Een gepubliceerde module is een module die beschikbaar is vanuit een geregistreerde opslagplaats, zoals de PowerShell Gallery. De modules PowerShellGet en Microsoft.PowerShell.PSResource Get bieden cmdlets voor het zoeken, installeren en publiceren van PowerShell-modules naar een geregistreerde opslagplaats.
De module PowerShellGet is opgenomen in PowerShell 5.0 en hoger. De module Microsoft.PowerShell.PSResourceGet is opgenomen in PowerShell 7.4 en hoger en is de voorkeurspakketbeheerder voor PowerShell.
Microsoft.PowerShell.PSResourceGet naast PowerShellGet, kunnen worden geïnstalleerd in oudere versies van PowerShell. Gebruik de cmdlet Install-Module of Install-PSResource om modules te installeren vanuit de PowerShell Gallery.
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
Zie Overzicht van PowerShellGetvoor meer informatie.
Een module handmatig installeren
U kunt een module handmatig installeren door de inhoud van de module uit een andere map te kopiëren. Deze map kan zich op een andere locatie op de lokale computer bevinden of op een andere computer zijn geïnstalleerd. Als u een module handmatig wilt installeren, kopieert u de hele modulemap naar een nieuwe locatie die is opgenomen in uw $Env:PSModulePath.
Gebruik in PowerShell de cmdlet Copy-Item. Voer bijvoorbeeld de volgende opdracht uit om de map MyModule uit C:\PSTestte kopiëren:
$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse
U kunt een module op elke locatie installeren, maar als u uw modules installeert op een standaardmodulelocatie, kunt u deze eenvoudiger beheren.
Geïnstalleerde modules zoeken
Met de Get-Module-cmdlet worden de PowerShell-modules opgehaald die in de huidige PowerShell-sessie worden geladen.
Get-Module
De vermelde modules kunnen modules bevatten die vanaf elke locatie zijn geïmporteerd, niet alleen uit $Env:PSModulePath.
Gebruik de volgende opdracht om modules weer te geven die zijn geïnstalleerd in de $Env:PSModulePath:
Get-Module -ListAvailable
Met deze opdracht worden alle modules opgehaald die zijn geïnstalleerd in $Env:PSModulePath, niet alleen de modules die in de huidige sessie worden geïmporteerd. Met deze opdracht worden geen modules vermeld die op andere locaties zijn geïnstalleerd.
Zie Get-Modulevoor meer informatie.
De opdrachten in een module weergeven
Gebruik de cmdlet Get-Command om alle beschikbare opdrachten te vinden. U kunt de parameters van de Get-Command-cmdlet gebruiken om opdrachten zoals module, naam en zelfstandig naamwoord te filteren.
Als u alle opdrachten in een module wilt zoeken, typt u:
Get-Command -Module <module-name>
Als u bijvoorbeeld de opdrachten wilt vinden in de module BitsTransfer, typt u:
Get-Command -Module BitsTransfer
Zie Get-Commandvoor meer informatie over de cmdlet .
Een module verwijderen
Wanneer u een module verwijdert, worden de opdrachten die de module heeft toegevoegd uit de sessie verwijderd. Met de volgende opdracht wordt bijvoorbeeld de module BitsTransfer uit de huidige sessie verwijderd.
Remove-Module BitsTransfer
Als u een module verwijdert, wordt de bewerking van het importeren van een module omgekeerd. Als u een module verwijdert, wordt de module niet verwijderd. Zie Remove-Modulevoor meer informatie.
Opdrachten kunnen vanuit modules en snap-ins aan uw sessie worden toegevoegd. Modules kunnen alle typen opdrachten toevoegen, waaronder cmdlets, providers en functies, evenals items zoals variabelen, aliassen en PowerShell-drives. Snap-ins kunnen alleen cmdlets en providers toevoegen.
Voordat u een module uit uw sessie verwijdert, gebruikt u de volgende opdrachten om te bepalen welke module u wilt verwijderen.
Gebruik bijvoorbeeld de volgende opdracht om de bron van de Get-Date en Get-Help cmdlets te vinden:
Get-Command Get-Date, Get-Help -All |
Select-Object -Property Name, CommandType, Module ,PSSnapIn
In de volgende uitvoer ziet u dat de Get-Help cmdlet zich in de Microsoft.PowerShell.Core snap-in bevindt. Deze snap-in kan niet worden verwijderd uit de sessie.
Name CommandType Module PSSnapIn
---- ----------- ------ --------
Get-Date Function
Get-Date Cmdlet Microsoft.PowerShell.Utility
Get-Help Cmdlet Microsoft.PowerShell.Core
Er zijn twee bronnen voor Get-Date. Een is een functie en de andere is een cmdlet in de Microsoft.PowerShell.Utility module. U kunt de module verwijderen met behulp van Remove-Module. Als u de functie wilt verwijderen, kunt u deze wissen van de Function:-schijf.
Remove-Item Function:Get-Date
Voor meer informatie over het Function: station, zie about_Function_Provider.
Naamconflicten beheren
Naamconflicten treden op wanneer meer dan één opdracht in de sessie dezelfde naam heeft. Het importeren van een module veroorzaakt een naamconflict wanneer opdrachten in de module dezelfde namen hebben als opdrachten of items in de sessie.
Import-Module kunnen opdrachten toevoegen waarmee opdrachten in de huidige sessie worden verborgen en vervangen. Naamconflicten kunnen ertoe leiden dat opdrachten worden verborgen of vervangen. Opdrachtvervanging vindt plaats wanneer de geïmporteerde module een opdracht bevat met dezelfde naam als een bestaande opdracht in de sessie. De zojuist geïmporteerde opdracht heeft voorrang op de bestaande opdracht.
Wanneer een sessie bijvoorbeeld een functie en een cmdlet met dezelfde naam bevat, wordt de functie standaard uitgevoerd in PowerShell. Wanneer de sessie opdrachten van hetzelfde type met dezelfde naam bevat, zoals twee cmdlets met dezelfde naam, wordt standaard de laatst toegevoegde opdracht uitgevoerd.
Zie about_Command_Precedencevoor meer informatie, waaronder een uitleg van de prioriteitsregels en instructies voor het uitvoeren van verborgen opdrachten.
U kunt een verborgen of vervangen opdracht uitvoeren door de opdrachtnaam te kwalificeren. Als u de opdrachtnaam wilt kwalificeren, voegt u de naam van de module toe die de versie van de gewenste opdracht bevat. Bijvoorbeeld:
Microsoft.PowerShell.Utility\Get-Date
Als u Get-Date uitvoert met het voorvoegsel van de modulenaam, zorgt u ervoor dat de versie wordt uitgevoerd vanuit de microsoft.PowerShell.Utility-module.
Als u naamconflicten wilt detecteren, gebruikt u de parameter Alle van de Get-Command-cmdlet. Standaard krijgt Get-Command alleen die opdrachten die worden uitgevoerd wanneer u de opdrachtnaam typt. De parameter All haalt opdrachten op die de specifieke naam in de sessie hebben.
Gebruik de NoClobber- of Prefix- parameters van de Import-Module cmdlet om naamconflicten te voorkomen. De parameter voorvoegsel voegt een voorvoegsel toe aan de namen van geïmporteerde opdrachten, zodat deze uniek zijn in de sessie. De parameter NoClobber importeert geen opdrachten die bestaande opdrachten in de sessie verbergen of vervangen.
U kunt ook de Alias, Cmdlet, Functionen Variabele parameters van Import-Module gebruiken om alleen de opdrachten te selecteren die u wilt importeren en u kunt opdrachten uitsluiten die naamconflicten veroorzaken in uw sessie.
Auteurs van modules kunnen naamconflicten voorkomen met behulp van de eigenschap DefaultCommandPrefix eigenschap van het modulemanifest om een standaardvoorvoegsel toe te voegen aan alle opdrachtnamen. De waarde van de parameter voorvoegsel heeft voorrang op de waarde van DefaultCommandPrefix.