about_Modules

Korte beschrijving

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

Lange beschrijving

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

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

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 met PowerShell-leden, zoals cmdlets, providers, functies, werkstromen, variabelen en aliassen. De leden van dit pakket kunnen worden geïmplementeerd in een PowerShell-script, een gecompileerde DLL of een combinatie van beide. Deze bestanden worden meestal gegroepeerd in één map. Zie Informatie over een Windows PowerShell Module in de SDK-documentatie voor meer informatie.

Module automatisch laden

Vanaf PowerShell 3.0 importeert PowerShell modules automatisch de eerste keer dat u een opdracht uitvoert in een geïnstalleerde module. U kunt nu de opdrachten in een module gebruiken zonder configuratie van een installatie of profiel, dus u hoeft modules niet 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 ze nog niet in de sessie zijn. U kunt een opdracht vinden en deze gebruiken zonder eerst de module te hoeven importeren.

Elk van de volgende voorbeelden zorgt ervoor dat de CimCmdlets-module, die bevat Get-CimInstance, in uw sessie wordt geïmporteerd.

  • Voer de opdracht uit

    Get-CimInstance Win32_OperatingSystem
    
  • De opdracht ophalen

    Get-Command Get-CimInstance
    
  • Help voor de opdracht ophalen

    Get-Help Get-CimInstance
    

Get-Command opdrachten met een jokerteken (*) worden beschouwd als detectie, niet gebruiken en geen modules importeren.

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 cmdlet uit te Import-Module voeren.

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 cmdlet uitvoeren om de Import-ModuleMicrosoft.WSMan.Management-module te importeren die het WSMan: station bevat.

U kunt de Import-Module opdracht nog steeds uitvoeren om een module te importeren en de $PSModuleAutoloadingPreference variabele te gebruiken om het 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 door de module zijn 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 map met bestanden erin, moet u deze installeren op uw computer voordat u deze kunt gebruiken in PowerShell.

De meeste modules zijn voor u geïnstalleerd. PowerShell wordt geleverd met verschillende vooraf geïnstalleerde modules, ook wel de kernmodules genoemd. Als op Windows-computers, als functies die deel uitmaken van het besturingssysteem cmdlets hebben om deze te beheren, worden deze modules vooraf geïnstalleerd. Wanneer u een Windows-functie installeert, met behulp van bijvoorbeeld de wizard Functies en onderdelen toevoegen in Serverbeheer, of het dialoogvenster Windows-functies 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, waaronder Windows Verkenner en Cmd.exe, evenals PowerShell. Gebruik de Copy-Item cmdlet in PowerShell. Als u bijvoorbeeld de map MyModule wilt kopiëren van C:\ps-test\MyModule naar de map Modules, 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, kunt u deze eenvoudiger beheren. Zie de sectie Module- en DSC-resourcelocaties en PSModulePath voor meer informatie over de standaardmodulelocaties.

Geïnstalleerde modules zoeken

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

Get-Module -ListAvailable

Als u de modules wilt vinden 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.

De 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 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 zoeken, typt u:

Get-Command -Module BitsTransfer

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

Help voor de opdrachten in een module ophalen

Als de module Help-bestanden bevat voor de opdrachten die worden geëxporteerd, worden de Help-onderwerpen weergegeven door 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 downloaden naar de Help-bestanden, zodat ze nooit verouderd zijn.

Als u hulp wilt krijgen voor 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 Help en Help bijwerken voor meer informatie.

Een module importeren

Mogelijk moet u een module importeren 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 wordt geleverd als een map.

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 alle geïmporteerde opdrachten, of de parameter NoClobber , waardoor de module geen opdrachten toevoegt die bestaande opdrachten in de sessie verbergen of vervangen.

Als u modules wilt importeren, gebruikt u de Import-Module cmdlet.

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

Import-Module <module-name>

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 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 TestCmdlets.dll module in de C:\ps-test map aan uw 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 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, verwijderd uit de sessie.

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

Remove-Module <module-name>

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.

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 waaraan is $env:PSModulePath toegewezen:

  • Locaties voor het hele systeem: $PSHOME\Modules

    Deze mappen bevatten modules die worden verzonden 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 door de gebruiker in het bereik van de gebruiker zijn geïnstalleerd. Install-Module heeft een bereikparameter waarmee u kunt opgeven of de module is geïnstalleerd voor de huidige gebruiker of voor alle gebruikers. Zie Install-Module voor meer informatie.

    De gebruikerspecifieke CurrentUser-locatie 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. Microsoft OneDrive kan ook de locatie van de map Documenten wijzigen.

    Deze locatie is $HOME\Documents\PowerShell\Modulesstandaard op Windows 10 en hoger. 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 Uitvoeren als administrator .

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

Als u de standaardmodulelocaties wilt weergeven, typt u:

$Env:PSModulePath

Gebruik de volgende opdrachtindeling om een standaardmodulelocatie toe te voegen.

$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 PSModulePathGet-Module en Import-Module opdrachten modules in dat pad opnemen.

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 System 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 PSModulePath-variabele.

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 dit niet de opdracht is die wordt uitgevoerd wanneer u de naam van de opdracht typt, maar u kunt deze uitvoeren met een andere methode, zoals door de opdrachtnaam te kwalificeren met de naam van de module of module waarin 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 waarmee opdrachten in de huidige sessie worden verborgen en vervangen. Opdrachten in uw sessie kunnen ook opdrachten verbergen die door de module zijn toegevoegd.

Gebruik de parameter All van de Get-Command cmdlet om naamconflicten te detecteren. Vanaf PowerShell 3.0 Get-Command worden alleen de opdrachten weergegeven die worden uitgevoerd wanneer u de naam van de opdracht typt. De parameter Alle haalt alle opdrachten op met de specifieke naam in de sessie.

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 veroorzaken in uw sessie.

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.

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

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

Als 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 de naamgevingsregels voor PowerShell-opdrachten volgen. Als de module die u importeert cmdlets of functies met niet-goedgekeurde werkwoorden in hun naam exporteert, wordt het Import-Module volgende waarschuwingsbericht weergegeven.

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

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

Gebruik de parameter DisableNameChecking van de cmdlet om het Import-Module waarschuwingsbericht te onderdrukken.

Ingebouwde modules en modules

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

Vanaf PowerShell 3.0 wordt voor hostprogramma's die de InitialSessionState.CreateDefault2 initiële sessiestatus-API implementeren de module Microsoft.PowerShell.Core standaard toegevoegd aan elke sessie. Modules worden automatisch geladen bij eerste gebruik.

Notitie

Externe sessies, inclusief sessies die worden gestart met behulp van de New-PSSession cmdlet, zijn oudere sessies waarin de ingebouwde opdrachten worden 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

Logboekregistratiemodule-gebeurtenissen

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