Delen via


about_Modules

Korte beschrijving

Hierin wordt uitgelegd hoe u PowerShell-modules installeert, importeert en gebruikt.

Lange beschrijving

PowerShell is een scripttaal en een opdrachtshell. De taal bestaat uit trefwoorden, die de structuur en logica van de verwerking bieden, en opdrachten waarmee het werk wordt uitgevoerd. Opdrachten in PowerShell worden geïmplementeerd als scripts, functies of cmdlets.

Een module is een zelfstandige herbruikbare eenheid die cmdlets, providers, functies, variabelen en andere typen resources kan bevatten die als één eenheid kunnen worden geïmporteerd.

PowerShell wordt geleverd met een basisset modules. U kunt indien nodig ook meer modules installeren. Standaard worden geïnstalleerde modules automatisch geladen wanneer u voor het eerst een opdracht uit een module gebruikt. Gebruik de $PSModuleAutoloadingPreference variabele om automatisch laden van modules in te schakelen, uit te schakelen en te configureren. Zie about_Preference_Variables voor meer informatie.

U kunt tijdens een sessie uit- of opnieuw laden. Gebruik de Remove-Module cmdlet om een module uit uw sessie te verwijderen. Gebruik de Import-Module cmdlet om een module te laden.

Modules kunnen worden gemaakt als gecompileerde .NET-assembly's die zijn geschreven in C#, of als op scripts gebaseerde modules die zijn geschreven in PowerShell. In dit onderwerp wordt uitgelegd hoe u PowerShell-modules gebruikt. Zie Een PowerShell-module schrijven voor meer informatie over het schrijven van PowerShell-modules.

Notitie

Vóór PowerShell 3.0 waren 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 overblijft 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 latere versies. De module Microsoft.PowerShell.PSResourceGet is opgenomen in PowerShell 7.4 en latere versies. Microsoft.PowerShell.PSResourceGet is het nieuwe voorkeurspakketbeheer voor PowerShell en kan worden geïnstalleerd in eerdere versies van PowerShell. Gebruik de Install-Module cmdlet 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 PowerShellGet voor meer informatie.

Een module handmatig installeren

Als u een module ontvangt als een map met bestanden erin, moet u deze op uw computer installeren 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 wordt geïnstalleerd. Andere modules kunnen worden geleverd in een installatieprogramma of installatieprogramma waarmee de module wordt geïnstalleerd.

De map voor de Modules 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 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 naar 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 op een standaardmodulelocatie installeert, zijn ze eenvoudiger te 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 (laadt) PowerShell die module automatisch. De module moet worden opgeslagen op de locaties die zijn opgegeven in de omgevingsvariabele $env:PSModulePath . 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. Het is niet nodig om modules 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, in uw sessie wordt geïmporteerd.

  • De opdracht uitvoeren

    Get-CimInstance Win32_OperatingSystem
    
  • De opdracht ophalen

    Get-Command Get-CimInstance
    
  • Hulp vragen voor de opdracht

    Get-Help Get-CimInstance
    

U kunt de Get-Command cmdlet gebruiken om de opdrachten in alle geïnstalleerde modules weer te geven, zelfs als ze zich nog niet in de sessie bevinden. Wanneer u met een jokerteken (*) gebruiktGet-Command, importeert PowerShell geen modules. 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 module Microsoft.WSMan.Management te importeren die het WSMan: station bevat.

Een module handmatig importeren

Het 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 een zelfstandige .dll module of .psm1 een 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 zijn geïmporteerd uit de module. 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 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:PSModulePathbevindt, gebruikt u het volledig gekwalificeerde pad naar de modulemap. Als u bijvoorbeeld de module TestCmdlets in de C:\ps-test map 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 module TestCmdlets.dll in de C:\ps-test map wilt toevoegen aan uw sessie, 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 aan het begin van elke sessie importeren

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 zijn geïmporteerd vanaf elke locatie, niet alleen van $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 zijn geïmporteerd in de huidige sessie. Met deze opdracht worden geen modules weergegeven 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 te filteren, zoals op module, naam en zelfstandig naamwoord.

Als u alle opdrachten in een module wilt zoeken, typt u:

Get-Command -Module <module-name>

Als u bijvoorbeeld de opdrachten in de bitstransfermodule wilt zoeken, 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, verwijderd uit de sessie. Met de volgende opdracht verwijdert u bijvoorbeeld de BitsTransfer-module uit de huidige sessie.

Remove-Module BitsTransfer

Als u een module verwijdert, wordt de bewerking van het importeren van een module omgedraaid. 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 cmdlets en Get-Help te zoeken:

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 van het Function: station verwijderen.

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 die opdrachten in de huidige sessie verbergen 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 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_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 te kwalificeren. Als u de opdrachtnaam wilt kwalificeren, voegt u de naam van de module toe die de gewenste versie van de opdracht bevat. Bijvoorbeeld:

Microsoft.PowerShell.Utility\Get-Date

Als u wordt uitgevoerd Get-Date met het voorvoegsel van de modulenaam, zorgt u ervoor dat de versie van de module Microsoft.PowerShell.Utility wordt uitgevoerd.

Als u naamconflicten wilt detecteren, gebruikt u de parameter All van de Get-Command cmdlet. Krijgt standaard Get-Command alleen de opdrachten 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. De parameter Voorvoegsel voegt een voorvoegsel toe aan de namen van geïmporteerde opdrachten, zodat deze uniek zijn in de sessie. De NoClobber parameter importeert geen opdrachten die bestaande opdrachten in de sessie verbergen of vervangen.

U kunt ook de parameters Alias, Cmdlet, Functie en Variabele van Import-Module gebruiken om 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 door de eigenschap DefaultCommandPrefix van het modulemanifest te gebruiken om een standaardvoorvoegsel toe te voegen aan alle opdrachtnamen. De waarde van de parameter Voorvoegsel heeft voorrang op de waarde van DefaultCommandPrefix.

Zie ook