Delen via


about_Modules

Korte beschrijving

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

Lange beschrijving

Een module is een pakket dat PowerShell-leden bevat, zoals cmdlets, providers, functies, werkstromen, variabelen en aliassen.

Mensen die opdrachten schrijven, kunnen modules gebruiken om hun opdrachten te ordenen en met anderen te delen. Mensen die modules ontvangen, kunnen de opdrachten in de modules toevoegen aan hun PowerShell-sessies en deze net als de ingebouwde opdrachten gebruiken.

In dit onderwerp wordt uitgelegd hoe u PowerShell-modules gebruikt. Zie Een PowerShell-module schrijven voor meer informatie over het schrijven van PowerShell-modules.

Wat is een module?

Een module is een pakket dat PowerShell-leden bevat, zoals cmdlets, providers, functies, werkstromen, variabelen en aliassen. De leden van dit pakket kunnen worden geïmplementeerd in een PowerShell-script, een gecompileerd DLL-bestand of een combinatie van beide. Deze bestanden worden meestal gegroepeerd in één map. Zie Understanding a Windows PowerShell Module (Informatie over een Windows PowerShell module) in de SDK-documentatie voor meer informatie.

Module automatisch laden

Vanaf PowerShell 3.0 importeert PowerShell automatisch modules wanneer u voor het eerst een opdracht uitvoert in een geïnstalleerde module. U kunt nu de opdrachten in een module gebruiken zonder configuratie of profielconfiguratie, zodat u modules niet hoeft te beheren nadat u ze op uw computer hebt geïnstalleerd.

De opdrachten in een module zijn ook gemakkelijker te vinden. De Get-Command cmdlet haalt nu alle opdrachten op in alle geïnstalleerde modules, zelfs als deze zich nog niet in de sessie bevinden. U kunt een opdracht zoeken en deze gebruiken zonder dat u eerst de module hoeft te importeren.

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
    

Get-Command opdrachten die een jokerteken (*) bevatten, worden beschouwd als voor detectie, niet voor gebruik en importeren geen modules.

Alleen modules die zijn opgeslagen op de locatie die is opgegeven door de omgevingsvariabele PSModulePath, worden automatisch geïmporteerd. Modules op andere locaties moeten worden geïmporteerd door de Import-Module cmdlet uit te voeren.

Opdrachten die gebruikmaken van PowerShell-providers importeren ook niet automatisch een module. Als u bijvoorbeeld een opdracht gebruikt waarvoor het station WSMan: 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.

U kunt nog steeds de Import-Module opdracht uitvoeren om een module te importeren en de $PSModuleAutoloadingPreference variabele gebruiken om automatisch importeren van modules in te schakelen, uit te schakelen en te configureren. Zie about_Preference_Variables voor meer informatie.

Een module gebruiken

Voer de volgende taken uit om een module te gebruiken:

  1. Installeer de module. (Dit wordt vaak voor u gedaan.)
  2. Zoek de opdrachten die de module heeft toegevoegd.
  3. Gebruik de opdrachten die door de module zijn toegevoegd.

In dit onderwerp wordt uitgelegd hoe u deze taken uitvoert. Het bevat ook andere nuttige informatie over het beheren van modules.

Een module 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.

De meeste modules worden voor u geïnstalleerd. PowerShell wordt geleverd met verschillende vooraf geïnstalleerde modules, ook wel kernmodules genoemd. Als op Windows-computers functies die deel uitmaken van het besturingssysteem cmdlets hebben om deze te beheren, zijn deze modules vooraf geïnstalleerd. Wanneer u een Windows-functie installeert, bijvoorbeeld met behulp van de wizard Functies en onderdelen toevoegen in Serverbeheer of het dialoogvenster Windows-onderdelen in- of uitschakelen in Configuratiescherm, worden alle PowerShell-modules die deel uitmaken van de functie geïnstalleerd. Veel andere modules worden geleverd in een installatieprogramma of installatieprogramma waarmee de module wordt geïnstalleerd.

Gebruik de volgende opdracht om een map Modules te maken voor de huidige gebruiker:

New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules

Kopieer de volledige modulemap naar de map Modules. U kunt elke methode gebruiken om de map te kopiëren, inclusief Windows Verkenner en Cmd.exe, evenals PowerShell. Gebruik in PowerShell de Copy-Item cmdlet. Als u bijvoorbeeld de map MyModule van C:\ps-test\MyModule naar de map Modules wilt kopiëren, typt u:

Copy-Item -Path C:\ps-test\MyModule -Destination `
    $HOME\Documents\PowerShell\Modules

U kunt een module op elke locatie installeren, maar als u uw modules op een standaardmodulelocatie installeert, zijn ze eenvoudiger te beheren. Zie de sectie Module- en DSC-resourcelocaties en PSModulePath voor meer informatie over de standaardmodulelocaties.

Geïnstalleerde modules zoeken

Als u wilt zoeken naar modules die zijn geïnstalleerd op een standaardmodulelocatie, maar nog niet zijn geïmporteerd in uw sessie, typt u:

Get-Module -ListAvailable

Als u wilt zoeken naar de modules die al in uw sessie zijn geïmporteerd, typt u bij de PowerShell-prompt:

Get-Module

Zie Get-Module voor meer informatie over de Get-Module cmdlet.

Opdrachten zoeken in een module

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 module BitsTransfer wilt vinden, typt u:

Get-Command -Module BitsTransfer

Zie Get-Command voor meer informatie over de Get-Command cmdlet.

Hulp krijgen voor de opdrachten in een module

Als de module Help-bestanden bevat voor de opdrachten die worden geëxporteerd, worden de Help-onderwerpen weergegeven in de Get-Help cmdlet. Gebruik dezelfde Get-Help opdrachtindeling die u zou gebruiken om hulp te krijgen voor elke opdracht in PowerShell.

Vanaf PowerShell 3.0 kunt u Help-bestanden voor een module downloaden en updates voor de Help-bestanden downloaden, zodat ze nooit verouderd zijn.

Voor hulp bij opdrachten in een module typt u:

Get-Help <command-name>

Als u online hulp wilt krijgen voor opdrachten in een module, typt u:

Get-Help <command-name> -Online

Als u de Help-bestanden voor de opdrachten in een module wilt downloaden en installeren, typt u:

Update-Help -Module <module-name>

Zie Get-Help en Update-Help voor meer informatie.

Een module importeren

Mogelijk moet u een module of een modulebestand importeren. Importeren is vereist wanneer een module niet is geïnstalleerd op de locaties die zijn opgegeven door de omgevingsvariabele PSModulePath , $env:PSModulePathof de module bestaat uit een bestand, zoals een .dll- of .psm1-bestand, in plaats van een typische module die als een map wordt geleverd.

U kunt er ook voor kiezen om een module te importeren, zodat u de parameters van de Import-Module opdracht kunt gebruiken, zoals de parameter Voorvoegsel, waarmee een onderscheidend voorvoegsel wordt toegevoegd aan de namen van zelfstandig naamwoorden van alle geïmporteerde opdrachten, of de parameter NoClobber , waarmee wordt voorkomen dat de module opdrachten toevoegt die bestaande opdrachten in de sessie verbergen of vervangen.

Gebruik de Import-Module cmdlet om modules te importeren.

Als u modules wilt importeren in een PSModulePath-locatie in de huidige sessie, gebruikt u de volgende opdrachtindeling.

Import-Module <module-name>

Met de volgende opdracht importeert u bijvoorbeeld de module BitsTransfer in de huidige sessie.

Import-Module BitsTransfer

Als u een module wilt importeren die zich niet op een standaardmodulelocatie bevindt, gebruikt u het volledig gekwalificeerde pad naar de modulemap in de opdracht .

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 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 importeren in 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.

Een module verwijderen

Wanneer u een module verwijdert, worden de opdrachten die de module heeft toegevoegd uit de sessie verwijderd.

Als u een module uit uw sessie wilt verwijderen, gebruikt u de volgende opdrachtindeling.

Remove-Module <module-name>

Met de volgende opdracht verwijdert u bijvoorbeeld de module BitsTransfer uit de huidige sessie.

Remove-Module BitsTransfer

Als u een module verwijdert, wordt de bewerking van het importeren van een module ongedaan gemaakt. Als u een module verwijdert, wordt de module niet verwijderd. Zie Remove-Module voor meer informatie.

Module- en DSC-resourcelocaties en PSModulePath

De $env:PSModulePath omgevingsvariabele bevat een lijst met maplocaties die worden doorzocht om modules en resources te vinden.

Standaard zijn de effectieve locaties die zijn toegewezen aan $env:PSModulePath :

  • Locaties voor het hele systeem: $PSHOME\Modules

    Deze mappen bevatten modules die worden geleverd met Windows en PowerShell.

    DSC-resources die zijn opgenomen in PowerShell, worden opgeslagen in de $PSHOME\Modules\PSDesiredStateConfiguration\DSCResources map.

  • Gebruikersspecifieke modules: dit zijn modules die zijn geïnstalleerd door de gebruiker binnen het bereik van de gebruiker. Install-Module heeft een bereikparameter waarmee u kunt opgeven of de module moet worden geïnstalleerd voor de huidige gebruiker of voor alle gebruikers. Zie Install-Module voor meer informatie.

    De gebruikersspecifieke locatie van CurrentUser in Windows is de PowerShell\Modules map op de locatie Documenten in uw gebruikersprofiel. Het specifieke pad van die locatie verschilt per versie van Windows en of u mapomleiding gebruikt of niet. Microsoft OneDrive kan ook de locatie van de map Documenten wijzigen.

    Op Windows 10 en hoger is $HOME\Documents\PowerShell\Modulesdeze locatie standaard . Op Linux of Mac is $HOME/.local/share/powershell/Modulesde locatie CurrentUser .

    Notitie

    U kunt de locatie van de map Documenten controleren met behulp van de volgende opdracht: [Environment]::GetFolderPath('MyDocuments').

  • De locatie AllUsers bevindt zich $env:PROGRAMFILES\PowerShell\Modules in Windows. Op Linux of Mac worden de modules opgeslagen op /usr/local/share/powershell/Modules.

Notitie

Als u bestanden in de $env:Windir\System32 map wilt toevoegen of wijzigen, start u PowerShell met de optie Als administrator uitvoeren .

U kunt de standaardmodulelocaties op uw systeem wijzigen door de waarde van de omgevingsvariabele PSModulePath te wijzigen, $Env:PSModulePath. De omgevingsvariabele PSModulePath is gemodelleerd op basis van de omgevingsvariabele Path en heeft dezelfde indeling.

Als u de standaardmodulelocaties wilt weergeven, typt u:

$Env:PSModulePath

Als u een standaardmodulelocatie wilt toevoegen, gebruikt u de volgende opdrachtindeling.

$Env:PSModulePath = $Env:PSModulePath + ";<path>"

De puntkomma (;) in de opdracht scheidt het nieuwe pad van het pad dat eraan voorafgaat in de lijst.

Als u bijvoorbeeld de C:\ps-test\Modules map wilt toevoegen, typt u:

$Env:PSModulePath + ";C:\ps-test\Modules"

Als u een standaardmodulelocatie wilt toevoegen in Linux of MacOS, gebruikt u de volgende opdrachtindeling:

$Env:PSModulePath += ":<path>"

Als u bijvoorbeeld de /usr/local/Fabrikam/Modules map wilt toevoegen aan de waarde van de omgevingsvariabele PSModulePath , typt u:

$Env:PSModulePath += ":/usr/local/Fabrikam/Modules"

In Linux of MacOS scheidt de dubbele punt (:) in de opdracht het nieuwe pad van het pad dat eraan voorafgaat in de lijst.

Wanneer u een pad toevoegt aan PSModulePath, Get-Module en Import-Module opdrachten bevatten modules in dat pad.

De waarde die u instelt, is alleen van invloed op de huidige sessie. Als u de wijziging permanent wilt maken, voegt u de opdracht toe aan uw PowerShell-profiel of gebruikt u Systeem in Configuratiescherm om de waarde van de omgevingsvariabele PSModulePath in het register te wijzigen.

Als u de wijziging permanent wilt maken, kunt u ook de methode SetEnvironmentVariable van de klasse System.Environment gebruiken om een pad toe te voegen aan de omgevingsvariabele PSModulePath .

Zie about_Environment_Variables voor meer informatie over de variabele PSModulePath.

Modules en naamconflicten

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.

Naamconflicten kunnen ertoe leiden dat opdrachten worden verborgen of vervangen.

Verborgen

Een opdracht is verborgen wanneer deze niet de opdracht is die wordt uitgevoerd wanneer u de opdrachtnaam typt, maar u kunt deze uitvoeren met een andere methode, bijvoorbeeld door de naam van de opdracht te kwalificeren met de naam van de module of module waaruit deze afkomstig is.

Vervangen

Een opdracht wordt vervangen wanneer u deze niet kunt uitvoeren omdat deze is overschreven door een opdracht met dezelfde naam. Zelfs wanneer u de module verwijdert die het conflict heeft veroorzaakt, kunt u geen vervangen opdracht uitvoeren, tenzij u de sessie opnieuw start.

Import-Module kan opdrachten toevoegen die opdrachten in de huidige sessie verbergen en vervangen. Opdrachten in uw sessie kunnen ook opdrachten verbergen die door de module zijn toegevoegd.

Als u naamconflicten wilt detecteren, gebruikt u de parameter All van de Get-Command cmdlet. Vanaf PowerShell 3.0 Get-Command krijgt u alleen die 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. Met de noClobber-parameter worden geen opdrachten geïmporteerd die bestaande opdrachten in de sessie zouden 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.

Zelfs als een opdracht is verborgen, kunt u deze uitvoeren door de opdrachtnaam te kwalificeren met de naam van de module of module waaruit deze afkomstig is.

De powerShell-opdrachtprioriteitsregels bepalen welke opdracht wordt uitgevoerd wanneer de sessie opdrachten met dezelfde naam bevat.

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.

Modules en snap-ins

U kunt opdrachten toevoegen aan uw sessie vanuit modules en modules. 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 of module uit uw sessie verwijdert, gebruikt u de volgende opdrachten om te bepalen welke opdrachten worden verwijderd.

Gebruik de volgende opdrachtindeling om de bron van een cmdlet in uw sessie te vinden:

Get-Command <cmdlet-name> | Format-List -Property verb,noun,pssnapin,module

Als u bijvoorbeeld de bron van de Get-Date cmdlet wilt zoeken, typt u:

Get-Command Get-Date | Format-List -Property verb,noun,module

De opdrachten die een module exporteert, moeten voldoen aan de naamgevingsregels voor PowerShell-opdrachten. Als de module die u importeert cmdlets of functies exporteert met niet-goedgekeurde werkwoorden in hun naam, wordt Import-Module het volgende waarschuwingsbericht weergegeven.

WAARSCHUWING: sommige geïmporteerde opdrachtnamen bevatten niet-goedgekeurde werkwoorden, waardoor ze mogelijk minder detecteerbaar zijn. Gebruik de parameter Uitgebreid voor meer details of typ Get-Verb om de lijst met goedgekeurde werkwoorden weer te geven.

Dit bericht is slechts een waarschuwing. De volledige module wordt nog steeds geïmporteerd, inclusief de niet-conforme opdrachten. Hoewel het bericht wordt weergegeven voor modulegebruikers, moet het naamgevingsprobleem worden opgelost door de auteur van de module.

Als u het waarschuwingsbericht wilt onderdrukken, gebruikt u de parameter DisableNameChecking van de Import-Module cmdlet.

Ingebouwde modules en modules

In PowerShell 2.0 en in oudere hostprogramma's in PowerShell 3.0 en hoger worden de kernopdrachten die met PowerShell zijn geïnstalleerd, verpakt in modules die automatisch worden toegevoegd aan elke PowerShell-sessie.

Vanaf PowerShell 3.0 wordt voor hostprogramma's die de API voor de InitialSessionState.CreateDefault2 eerste sessiestatus implementeren, de Module Microsoft.PowerShell.Core standaard aan elke sessie toegevoegd. Modules worden automatisch geladen bij het eerste gebruik.

Notitie

Externe sessies, waaronder sessies die worden gestart met behulp van de New-PSSession cmdlet, zijn sessies in oudere stijl waarin de ingebouwde opdrachten zijn verpakt in modules.

De volgende modules (of modules) worden geïnstalleerd met PowerShell.

  • CimCmdlets
  • Microsoft.PowerShell.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Microsoft.WSMan.Management
  • PackageManagement
  • PowerShellGet
  • PSDesiredStateConfiguration
  • PSDiagnostics
  • PSReadline

Module-gebeurtenissen in logboekregistratie

Vanaf PowerShell 3.0 kunt u uitvoeringsgebeurtenissen vastleggen voor de cmdlets en functies in PowerShell-modules en -modules door de eigenschap LogPipelineExecutionDetails van modules en modules in te stellen op $True. U kunt ook een groepsbeleid instelling, Modulelogboekregistratie inschakelen, gebruiken om modulelogboekregistratie in te schakelen in alle PowerShell-sessies. Zie de artikelen over logboekregistratie en groepsbeleid voor meer informatie.

Zie ook