about_Modules

Korte beschrijving

Hier 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 organiseren en deze te delen met anderen. 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 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 gecompileerde DLL of een combinatie van beide. Deze bestanden worden meestal gegroepeerd in één map. Zie Understanding a 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 in een geïnstalleerde module hebt uitgevoerd. U kunt nu de opdrachten in een module gebruiken zonder configuratie van een configuratie 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 krijgt nu alle opdrachten in alle geïnstalleerde modules, zelfs als ze zich nog niet in de sessie. U kunt een opdracht vinden en deze gebruiken zonder dat u eerst de module hoeft te importeren.

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

  • De opdracht uitvoeren

    Get-CimInstance Win32_OperatingSystem
    
  • De opdracht

    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 werken.

Bovendien importeren opdrachten die gebruikmaken van PowerShell-providers niet automatisch een module. Als u bijvoorbeeld een opdracht gebruikt die het station WSMan: vereist, zoals de cmdlet, moet u mogelijk de cmdlet uitvoeren om de Get-PSSessionConfiguration Import-Module module Microsoft.WSMan.Management met het station te WSMan: importeren.

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

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 de module heeft 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, moet u deze installeren op uw computer voordat u deze kunt gebruiken in PowerShell.

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

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, Windows Explorer en Cmd.exe, evenals PowerShell. Gebruik in PowerShell de Copy-Item cmdlet . 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 installeert op een standaardlocatie van de module, zijn deze eenvoudiger te beheren. Zie de sectie Module- en DSC-resourcelocaties en PSModulePath voor meer informatie over de standaardlocaties van de module.

Geïnstalleerde modules zoeken

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

Get-Module -ListAvailable

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

Get-Module

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

De opdrachten in een module zoeken

Gebruik de Get-Command cmdlet om alle beschikbare opdrachten te vinden. U kunt de parameters van de cmdlet gebruiken om opdrachten te filteren, zoals Get-Command op module, naam en zelfstandig naamwoord.

Als u wilt zoeken naar alle opdrachten in een module, 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 Get-Commandvoor meer informatie over de cmdlet .

Meer Hulp vragen voor de opdrachten in een module

Als de module Help-bestanden bevat voor de opdrachten die worden geexporteerd, worden in Get-Help de cmdlet de Help-onderwerpen weergegeven. 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 nodig voor een opdracht in een module, typt u:

Get-Help <command-name>

Als u hulp online 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 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, of als de module uit een bestand bestaat, zoals een $env:PSModulePath .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 opdracht kunt gebruiken, zoals de parameter Prefix, waarmee een voorvoegsel wordt toegevoegd aan de zelfstandige naamwoorden van alle geïmporteerde opdrachten of de Import-Module parameter NoClobber, waarmee wordt voorkomen dat de module opdrachten toevoegt die bestaande opdrachten in de sessie zouden verbergen of vervangen.

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

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 standaardlocatie van de module bevindt, gebruikt u het volledig gekwalificeerde pad naar de modulemap in de opdracht .

Als u bijvoorbeeld de module TestCmdlets in de map aan uw sessie wilt C:\ps-test toevoegen, typt u:

Import-Module C:\ps-test\TestCmdlets

Als u een modulebestand wilt importeren dat niet is opgenomen in een modulemap, 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-Modulevoor meer informatie over het toevoegen van modules aan uw sessie.

Een module importeren in elke sessie

Met Import-Module de opdracht importeert u modules 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 voor meer informatie over profielen about_Profiles.

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 module BitsTransfer uit de huidige sessie verwijderd.

Remove-Module BitsTransfer

Als u een module verwijdert, wordt de werking 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.

De effectieve locaties die zijn toegewezen aan zijn $env:PSModulePath standaard:

  • Locaties voor het hele systeem: $PSHOME\Modules

    Deze mappen bevatten modules die worden aangeboden 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 zijn geïnstalleerd in het bereik van de gebruiker. 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 gebruikersspecifieke CurrentUser-locatie op Windows is de map die zich bevindt op de PowerShell\Modules locatie Documenten in uw gebruikersprofiel. Het specifieke pad van die locatie varieert per versie van Windows of u mapomleiding gebruikt. Microsoft OneDrive kunt ook de locatie van de map Documenten wijzigen.

    Standaard is Windows 10 en $HOME\Documents\PowerShell\Modules hoger. Op Linux of Mac is de currentUser-locatie $HOME/.local/share/powershell/Modules .

    Notitie

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

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

Notitie

Als u bestanden in de map wilt toevoegen of $env:Windir\System32 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 $Env:PSModulePath wijzigen. De omgevingsvariabele PSModulePath is gemodelleerd naar de omgevingsvariabele Pad en heeft dezelfde indeling.

Als u wilt weergeven van de standaardlocaties module, typt u:

$Env:PSModulePath

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

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

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

Als u bijvoorbeeld de map wilt C:\ps-test\Modules 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 map wilt toevoegen aan de waarde van de omgevingsvariabele /usr/local/Fabrikam/Modules 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 naar PSModulePath toevoegt, Get-Module bevatten opdrachten modules in dat Import-Module pad.

De waarde die u in te stellen 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 persistent 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 voor meer informatie over de variabele PSModulePath about_Environment_Variables.

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 verborgen of vervangen worden.

Verborgen

Een opdracht wordt verborgen wanneer dit niet de opdracht is die wordt uitgevoerd wanneer u de naam van de opdracht typt, maar u kunt deze uitvoeren met behulp van 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 de module heeft toegevoegd.

Als u naamconflicten wilt detecteren, gebruikt u de parameter All van de Get-Command cmdlet . Vanaf PowerShell 3.0 krijgt alleen die opdrachten die worden Get-Command uitgevoerd wanneer u de naam van de opdracht typt. De parameter All haalt alle opdrachten op met de specifieke naam in de sessie.

Gebruik de parameters NoClobber of Prefix van de cmdlet om naamconflicten Import-Module te voorkomen. De parameter Prefix 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, Function en Variable gebruiken om alleen de opdrachten te selecteren die u wilt importeren, en u kunt opdrachten uitsluiten die naamconflicten veroorzaken in uw Import-Module 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 Prefix heeft voorrang op de waarde van DefaultCommandPrefix.

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

De powerShell-opdracht prioriteitsregels 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 door PowerShell uitgevoerd. 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 voor meer informatie, waaronder een uitleg van de prioriteitsregels en instructies voor het uitvoeren van verborgen opdrachten, about_Command_Precedence.

Modules en snap-ins

U kunt opdrachten aan uw sessie toevoegen vanuit modules en modules. Modules kunnen alle soorten opdrachten toevoegen, waaronder cmdlets, providers en functies, en items, zoals variabelen, aliassen en PowerShell-stations. Met module kunnen alleen cmdlets en providers worden 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 vinden, 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, geeft de Import-Module cmdlet het volgende waarschuwingsbericht weer.

WAARSCHUWING: Sommige geïmporteerde opdrachtnamen bevatten niet-goedgekeurde werkwoorden, waardoor ze mogelijk minder detecteerbaar zijn. Gebruik de parameter Verbose voor meer details of typ Get-Verb lijst met goedgekeurde woorden 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 naamprobleem worden opgelost door de moduleauteur.

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 belangrijkste opdrachten die met PowerShell zijn geïnstalleerd, verpakt in modulen die automatisch worden toegevoegd aan elke PowerShell-sessie.

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

Notitie

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

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

Logboekregistratie van modulegebeurtenissen

Vanaf PowerShell 3.0 kunt u uitvoeringsgebeurtenissen voor de cmdlets en functies in PowerShell-modules en -modules opnemen door de eigenschap LogPipelineExecutionDetails van modules en modules in te stellen op $True . U kunt ook de groepsbeleid Modulelogregistratie inschakelen gebruiken om modulelogregistratie in teschakelen in alle PowerShell-sessies. Zie de artikelen over logboekregistratie en groepsbeleid voor meer informatie.

Zie ook

about_Logging_Windows

about_Logging_Non-Windows

about_Group_Policy_Settings

about_Command_Precedence

about_Group_Policy_Settings

Get-Command

Get-Help

Get-Module

Import-Module

Remove-Module