about_Modules
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 die kunnen worden geïmporteerd in een PowerShell-sessie of een aangepast PowerShell-programma.
Voordat de functionaliteit in een module bruikbaar is, moet de module in de PowerShell-sessie worden geladen. Standaard wordt in PowerShell automatisch een geïnstalleerde module geladen wanneer u voor het eerst een opdracht uit de module gebruikt. U kunt het gedrag voor het automatisch laden van modules configureren met behulp van de variabele $PSModuleAutoloadingPreference
. Zie about_Preference_Variables voor meer informatie.
U kunt modules ook handmatig uitpakken of opnieuw laden tijdens een PowerShell-sessie. Als u een module wilt uitladen, gebruikt u de Remove-Module
cmdlet. Als u een module wilt laden of opnieuw wilt laden, gebruikt u Import-Module
.
PowerShell wordt geleverd met een basisset modules. Iedereen kan nieuwe PowerShell-opdrachten of andere resources maken en publiceren als modules die gebruikers zo nodig kunnen installeren.
U kunt modules schrijven in C# als gecompileerde .NET-assembly's, ook wel systeemeigen modules genoemd, of in gewone PowerShell, ook wel scriptmodules genoemd. In dit onderwerp wordt uitgelegd hoe u PowerShell-modules gebruikt. Zie Een PowerShell-module schrijven voor 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 module die nog beschikbaar is in PowerShell. Alle andere modules zijn geconverteerd naar modules. Het maken van nieuwe modules wordt niet meer ondersteund.
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.PSResourceGet bieden cmdlets voor het zoeken, installeren en publiceren van PowerShell-modules naar een geregistreerde opslagplaats.
De PowerShellGet-module is opgenomen in PowerShell 5.0 en hoger. De Microsoft.PowerShell.PSResourceGet-module is opgenomen in PowerShell 7.4 en hoger. Microsoft.PowerShell.PSResourceGet is de nieuwe voorkeurspakketbeheerder voor PowerShell en kan worden geïnstalleerd in eerdere versies van PowerShell. Gebruik de Install-Module
of Install-PSResource
cmdlet 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 PowerShellGet voor meer informatie.
Een module handmatig installeren
Als u een module ontvangt als map met daarin bestanden, moet u deze installeren op uw computer voordat u deze in PowerShell kunt gebruiken.
PowerShell wordt geleverd met verschillende vooraf geïnstalleerde modules. Op Windows-computers bevatten veel Windows-functies modules voor het beheren van de functie. Deze modules worden geïnstalleerd wanneer de functie is geïnstalleerd. Andere modules kunnen worden geleverd in een installatieprogramma of installatieprogramma waarmee de module wordt geïnstalleerd.
De map voor de huidige gebruiker bestaat standaard Modules
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 te maken voor de huidige gebruiker:
$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules
Kopieer de hele modulemap naar de nieuwe gemaakte map. Gebruik in PowerShell de Copy-Item
cmdlet. Voer bijvoorbeeld de volgende opdracht uit om de MyModule
map te kopiëren van C:\PSTest
de map die u zojuist hebt gemaakt:
Copy-Item -Path C:\PSTest\MyModule -Destination $folder
U kunt een module op elke locatie installeren, maar als u uw modules installeert op een standaardmodulelocatie, kunt u deze eenvoudiger beheren. Zie about_PSModulePath voor 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 $env:PSModulePath
omgevingsvariabele. Modules op andere locaties moeten worden geïmporteerd met behulp van de Import-Module
cmdlet.
Met automatisch laden van modules kunt u opdrachten in een module gebruiken zonder installatie of profielconfiguratie. U hoeft modules niet te beheren nadat u ze op uw computer hebt geïnstalleerd.
Elk van de volgende voorbeelden zorgt ervoor dat de CimCmdlets-module , die bevat Get-CimInstance
, wordt geïmporteerd in uw sessie.
Voer de opdracht uit
Get-CimInstance Win32_OperatingSystem
De opdracht ophalen
Get-Command Get-CimInstance
Help voor de opdracht ophalen
Get-Help Get-CimInstance
U kunt de opdrachten in alle geïnstalleerde modules gebruiken in de Get-Command
cmdlet-lijst, zelfs als ze nog niet in de sessie zijn. Wanneer u een jokerteken (*
) gebruiktGet-Command
, 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.
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 te importeren die het WSMan:
station bevat.
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 $env:PSModulePath
omgevingsvariabele, of wanneer de module wordt geleverd als zelfstandig .dll
of .psm1
bestand, in plaats van een verpakte module.
Mogelijk wilt u ook wijzigen hoe de module in uw sessie wordt geïmporteerd. De parameter Voorvoegsel van Import-Module
voegt bijvoorbeeld een onderscheidend voorvoegsel toe aan het zelfstandig naamwoordgedeelte van de cmdlets die uit de module zijn geïmporteerd. Met de parameter NoClobber voorkomt u dat de module opdrachten toevoegt die bestaande opdrachten in de sessie verbergen of vervangen. Zie Naamconflicten beheren voor meer informatie.
U kunt een module importeren die in uw $env:PSModulePath
module is geïnstalleerd door de naam van de module op te geven. Met de volgende opdracht importeert u bijvoorbeeld de BitsTransfer-module in de huidige sessie.
Import-Module BitsTransfer
Als u een module wilt importeren die zich niet in uw $env:PSModulePath
map bevindt, gebruikt u het volledig gekwalificeerde pad naar de modulemap. Als u bijvoorbeeld de module TestCmdlets in de C:\ps-test
map aan uw sessie wilt toevoegen, 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 aan uw C:\ps-test
sessie wilt toevoegen, typt u:
Import-Module C:\ps-test\TestCmdlets.dll
Zie Import-Module voor meer informatie over het toevoegen van modules aan uw sessie.
Een module importeren aan het begin van elke sessie
Met de Import-Module
opdracht 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_Profiles voor meer informatie over profielen.
Geïnstalleerde modules zoeken
De Get-Module
cmdlet haalt de PowerShell-modules op die in uw sessie zijn geïmporteerd.
Get-Module
De vermelde modules kunnen modules bevatten die vanaf elke locatie zijn geïmporteerd, niet alleen van $env:PSModulePath
.
Gebruik de volgende opdracht om modules weer te geven die zijn geïnstalleerd in:$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-Module voor meer informatie.
De opdrachten in een module weergeven
Gebruik de Get-Command
cmdlet 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 in de BitsTransfer-module wilt vinden, typt u:
Get-Command -Module BitsTransfer
Zie Get-Command voor meer informatie over de Get-Command
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 BitsTransfer-module 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-Module voor meer informatie.
Opdrachten kunnen vanuit modules en modules aan uw sessie worden toegevoegd. Modules kunnen alle typen opdrachten toevoegen, waaronder cmdlets, providers en functies en items, zoals variabelen, aliassen en PowerShell-stations. Modules 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 module Microsoft.PowerShell.Core bevindt. Deze module 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
. De ene is een functie en de andere is een cmdlet in de module Microsoft.PowerShell.Utility . U kunt de module verwijderen met behulp van Remove-Module
. Als u de functie wilt verwijderen, kunt u deze verwijderen uit het Function:
station.
Remove-Item Function:Get-Date
Zie about_Function_Provider voor meer informatie over het Function:
station.
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
kan 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 vervangt 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_Precedence voor meer informatie, waaronder een uitleg van de prioriteitsregels en instructies voor het uitvoeren van verborgen opdrachten.
U kunt een opdracht uitvoeren die is verborgen of vervangen door de naam van de opdracht in aanmerking te komen. Als u de opdrachtnaam wilt kwalificeren, voegt u de naam van de module toe dan de versie van de gewenste opdracht. Voorbeeld:
Microsoft.PowerShell.Utility\Get-Date
Als Get-Date
u het voorvoegsel van de modulenaam uitvoert, zorgt u ervoor dat de versie wordt uitgevoerd vanuit de microsoft.PowerShell.Utility-module .
Gebruik de parameter All van de Get-Command
cmdlet om naamconflicten te detecteren. Get-Command
Standaard worden alleen de opdrachten opgevraagd die worden uitgevoerd wanneer u de opdrachtnaam typt. Met de parameter All worden alle opdrachten met de specifieke naam in de sessie opgeslagen.
Gebruik de parameters NoClobber of Voorvoegsel van de Import-Module
cmdlet om naamconflicten te voorkomen. Met de parameter Voorvoegsel wordt een voorvoegsel toegevoegd 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 parameters Alias, Cmdlet, Functie en Variabele gebruiken om Import-Module
alleen de opdrachten te selecteren die u wilt importeren en u kunt opdrachten uitsluiten die naamconflicten in uw sessie veroorzaken.
Auteurs van modules kunnen naamconflicten voorkomen met behulp van de eigenschap DefaultCommandPrefix 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.