Delen via


Een PowerShell-module installeren

Nadat u de PowerShell-module hebt gemaakt, wilt u de module waarschijnlijk installeren op een systeem, zodat u of anderen deze kunnen gebruiken. Over het algemeen bestaat dit uit het kopiëren van de modulebestanden (bijvoorbeeld de .psm1of de binaire assembly, het modulemanifest en eventuele andere gekoppelde bestanden) naar een map op die computer. Voor een zeer klein project kan dit net zo eenvoudig zijn als het kopiëren en plakken van de bestanden met Windows Verkenner op één externe computer; Voor grotere oplossingen wilt u echter mogelijk een geavanceerder installatieproces gebruiken. Ongeacht hoe u uw module op het systeem krijgt, kan PowerShell een aantal technieken gebruiken waarmee gebruikers uw modules kunnen vinden en gebruiken. Daarom zorgt het belangrijkste probleem voor de installatie ervoor dat PowerShell uw module kan vinden. Zie Een PowerShell-module importeren voor meer informatie.

Regels voor het installeren van modules

De volgende informatie heeft betrekking op alle modules, inclusief modules die u voor eigen gebruik maakt, modules die u van andere partijen krijgt en modules die u naar anderen distribueert.

Modules installeren in PSModulePath

Installeer indien mogelijk alle modules in een pad dat wordt vermeld in de omgevingsvariabele PSModulePath of voeg het modulepad toe aan de waarde van de omgevingsvariabele PSModulePath.

De PSModulePath omgevingsvariabele ($Env:PSModulePath) bevat de locaties van Windows PowerShell-modules. Cmdlets zijn afhankelijk van de waarde van deze omgevingsvariabele om modules te vinden.

De waarde van de omgevingsvariabele PSModulePath bevat standaard de volgende mappen met systeem- en gebruikersmodules, maar u kunt de waarde toevoegen en bewerken.

  • $PSHOME\Modules (%windir%\System32\WindowsPowerShell\v1.0\Modules)

    Waarschuwing

    Deze locatie is gereserveerd voor modules die worden verzonden met Windows. Installeer geen modules op deze locatie.

  • $HOME\Documents\WindowsPowerShell\Modules (%HOMEDRIVE%%HOMEPATH%\Documents\WindowsPowerShell\Modules)

  • $Env:ProgramFiles\WindowsPowerShell\Modules (%ProgramFiles%\WindowsPowerShell\Modules)

    Gebruik een van de volgende opdrachten om de waarde van de PSModulePath omgevingsvariabele op te halen.

    $Env:PSModulePath
    [Environment]::GetEnvironmentVariable("PSModulePath")
    

    Gebruik de volgende opdrachtindeling om een modulepad toe te voegen aan de waarde van de PSModulePath omgevingsvariabelewaarde. Deze indeling maakt gebruik van de methode SetEnvironmentVariable van de klasse System.Environment om een sessieonafhankelijke wijziging aan te brengen in de omgevingsvariabele PSModulePath.

    #Save the current value in the $p variable.
    $p = [Environment]::GetEnvironmentVariable("PSModulePath")
    
    #Add the new path to the $p variable. Begin with a semi-colon separator.
    $p += ";C:\Program Files (x86)\MyCompany\Modules\"
    
    #Add the paths in $p to the PSModulePath value.
    [Environment]::SetEnvironmentVariable("PSModulePath",$p)
    

    Belangrijk

    Nadat u het pad hebt toegevoegd aan PSModulePath, moet u een omgevingsbericht over de wijziging uitzenden. Als u de wijziging uitzendt, kunnen andere toepassingen, zoals de shell, de wijziging ophalen. Als u de wijziging wilt uitzenden, moet u een WM_SETTINGCHANGE bericht met lParam ingesteld op de tekenreeks 'Omgeving'. Zorg ervoor dat u het bericht verzendt nadat de installatiecode van de module is bijgewerkt PSModulePath.

De juiste modulemapnaam gebruiken

Een goed gevormde module is een module die is opgeslagen in een map met dezelfde naam als de basisnaam van ten minste één bestand in de modulemap. Als een module niet goed is opgemaakt, herkent Windows PowerShell deze niet als een module.

De 'basisnaam' van een bestand is de naam zonder de bestandsnaamextensie. In een goed opgemaakte module moet de naam van de map met de modulebestanden overeenkomen met de basisnaam van ten minste één bestand in de module.

In de voorbeeldmodule fabrikam heeft bijvoorbeeld de map met de modulebestanden de naam Fabrikam en ten minste één bestand heeft de basisnaam Fabrikam. In dit geval hebben zowel Fabrikam.psd1 als Fabrikam.dll de basisnaam Fabrikam.

C:\Program Files
  Fabrikam Technologies
    Fabrikam Manager
      Modules
        Fabrikam
          Fabrikam.psd1 (module manifest)
          Fabrikam.dll (module assembly)

Effect van onjuiste installatie

Als de module niet goed is opgemaakt en de locatie ervan niet is opgenomen in de waarde van de PSModulePath omgevingsvariabele, werken de basisdetectiefuncties van Windows PowerShell, zoals het volgende, niet.

  • De functie Voor automatisch laden van modules kan de module niet automatisch importeren.

  • De ListAvailable parameter van de cmdlet Get-Module kan de module niet vinden.

  • De module kan niet worden gevonden met de Import-Module-cmdlet. Als u de module wilt importeren, moet u het volledige pad naar het hoofdmodulebestand of het manifestbestand van de module opgeven.

    Aanvullende functies, zoals de volgende, werken alleen als de module in de sessie wordt geïmporteerd. In goed gevormde modules in de omgevingsvariabele PSModulePath, werken deze functies zelfs wanneer de module niet in de sessie wordt geïmporteerd.

  • De cmdlet Get-Command kan geen opdrachten vinden in de module.

  • De Update-Help- en Save-Help cmdlets kunnen de help voor de module niet bijwerken of opslaan.

  • De cmdlet Show-Command kan de opdrachten niet vinden en weergeven in de module.

    De opdrachten in de module ontbreken in het venster Show-Command in Windows PowerShell Integrated Scripting Environment (ISE).

Waar modules te installeren

In deze sectie wordt uitgelegd waar in het bestandssysteem Windows PowerShell-modules moeten worden geïnstalleerd. De locatie is afhankelijk van hoe de module wordt gebruikt.

Modules installeren voor een specifieke gebruiker

Als u uw eigen module maakt of een module van een andere partij opkrijgt, zoals een website van de Windows PowerShell-community, en u wilt dat de module alleen beschikbaar is voor uw gebruikersaccount, installeert u de module in de gebruikersspecifieke map modules.

$HOME\Documents\WindowsPowerShell\Modules\<Module Folder>\<Module Files>

De gebruikersspecifieke modulesmap wordt standaard toegevoegd aan de waarde van de omgevingsvariabele PSModulePath.

Modules installeren voor alle gebruikers in programmabestanden

Als u wilt dat een module beschikbaar is voor alle gebruikersaccounts op de computer, installeert u de module op de locatie Program Files.

$Env:ProgramFiles\WindowsPowerShell\Modules\<Module Folder>\<Module Files>

Notitie

De locatie Program Files wordt standaard toegevoegd aan de waarde van de omgevingsvariabele PSModulePath in Windows PowerShell 4.0 en hoger. Voor eerdere versies van Windows PowerShell kunt u handmatig de locatie Program Files (%ProgramFiles%\WindowsPowerShell\Modules) maken en dit pad toevoegen aan de omgevingsvariabele PSModulePath, zoals hierboven beschreven.

Modules installeren in een productmap

Als u de module distribueert naar andere partijen, gebruikt u de standaardlocatie programbestanden die hierboven worden beschreven of maakt u uw eigen bedrijfsspecifieke of productspecifieke submap van de %ProgramFiles% directory.

Fabrikam Technologies, een fictief bedrijf, verzendt bijvoorbeeld een Windows PowerShell-module voor het Fabrikam Manager-product. Het installatieprogramma van de module maakt een submap Modules in de submap van fabrikam Manager-producten.

C:\Program Files
  Fabrikam Technologies
    Fabrikam Manager
      Modules
        Fabrikam
          Fabrikam.psd1 (module manifest)
          Fabrikam.dll (module assembly)

Als u de detectiefuncties van de Windows PowerShell-module wilt inschakelen om de Fabrikam-module te vinden, voegt het installatieprogramma van de Fabrikam-module de modulelocatie toe aan de waarde van de PSModulePath omgevingsvariabele.

$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";C:\Program Files\Fabrikam Technologies\Fabrikam Manager\Modules\"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)

Modules installeren in de map Common Files

Als een module wordt gebruikt door meerdere onderdelen van een product of door meerdere versies van een product, installeert u de module in een modulespecifieke submap van de submap %ProgramFiles%\Common Files\Modules.

In het volgende voorbeeld wordt de Fabrikam-module geïnstalleerd in een Fabrikam-submap van de %ProgramFiles%\Common Files\Modules submap. Houd er rekening mee dat elke module zich in een eigen submap in de submap Modules bevindt.

C:\Program Files
  Common Files
    Modules
      Fabrikam
        Fabrikam.psd1 (module manifest)
        Fabrikam.dll (module assembly)

Vervolgens verzekert het installatieprogramma de waarde van de PSModulePath omgevingsvariabele het pad van de Common Files\Modules submap.

$m = $Env:ProgramFiles + '\Common Files\Modules'
$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$q = $p -split ';'
if ($q -notcontains $m) {
    $q += ";$m"
}
$p = $q -join ';'
[Environment]::SetEnvironmentVariable("PSModulePath", $p)

Meerdere versies van een module installeren

Als u meerdere versies van dezelfde module wilt installeren, gebruikt u de volgende procedure.

  1. Maak een map voor elke versie van de module. Neem het versienummer op in de mapnaam.
  2. Maak een modulemanifest voor elke versie van de module. Voer in de waarde van de ModuleVersion sleutel in het manifest het versienummer van de module in. Sla het manifestbestand (.psd1) op in de versiespecifieke map voor de module.
  3. Voeg het pad van de hoofdmap van de module toe aan de waarde van de PSModulePath omgevingsvariabele, zoals wordt weergegeven in de volgende voorbeelden.

Als u een bepaalde versie van de module wilt importeren, kan de eindgebruiker de parameters MinimumVersion of RequiredVersion van de Import-Module-cmdlet gebruiken.

Als de Fabrikam-module bijvoorbeeld beschikbaar is in versie 8.0 en 9.0, kan de mapstructuur van de Fabrikam-module er ongeveer als volgt uitzien.

C:\Program Files
Fabrikam Manager
 Fabrikam8
   Fabrikam
     Fabrikam.psd1 (module manifest: ModuleVersion = "8.0")
     Fabrikam.dll (module assembly)
 Fabrikam9
   Fabrikam
     Fabrikam.psd1 (module manifest: ModuleVersion = "9.0")
     Fabrikam.dll (module assembly)

Het installatieprogramma voegt beide modulepaden toe aan de waarde van de PSModulePath omgevingsvariabele.

$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";C:\Program Files\Fabrikam\Fabrikam8;C:\Program Files\Fabrikam\Fabrikam9"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)

Wanneer deze stappen zijn voltooid, haalt de parameter ListAvailable van de cmdlet Get-Module beide Fabrikam-modules op. Als u een bepaalde module wilt importeren, gebruikt u de MinimumVersion of RequiredVersion parameters van de cmdlet Import-Module.

Als beide modules in dezelfde sessie worden geïmporteerd en de modules cmdlets met dezelfde namen bevatten, zijn de cmdlets die als laatste worden geïmporteerd, van kracht in de sessie.

Conflicten met opdrachtnamen verwerken

Er kunnen conflicten met de opdrachtnaam optreden wanneer de opdrachten die door een module worden geëxporteerd, dezelfde naam hebben als opdrachten in de sessie van de gebruiker.

Wanneer een sessie twee opdrachten bevat met dezelfde naam, voert Windows PowerShell het opdrachttype uit dat voorrang heeft. Wanneer een sessie twee opdrachten bevat met dezelfde naam en hetzelfde type, voert Windows PowerShell de opdracht uit die het laatst is toegevoegd aan de sessie. Als u een opdracht wilt uitvoeren die niet standaard wordt uitgevoerd, kunnen gebruikers de opdrachtnaam kwalificeren met de modulenaam.

Als de sessie bijvoorbeeld een Get-Date-functie en de cmdlet Get-Date bevat, wordt de functie standaard uitgevoerd in Windows PowerShell. Als u de cmdlet wilt uitvoeren, moet u de opdracht vooraf laten gaan met de modulenaam, zoals:

Microsoft.PowerShell.Utility\Get-Date

Om naamconflicten te voorkomen, kunnen auteurs van modules de DefaultCommandPrefix sleutel in het modulemanifest gebruiken om een zelfstandig naamwoordvoorvoegsel op te geven voor alle opdrachten die uit de module zijn geëxporteerd.

Gebruikers kunnen het voorvoegsel parameter van de Import-Module cmdlet gebruiken om een alternatief voorvoegsel te gebruiken. De waarde van de parameter voorvoegsel heeft voorrang op de waarde van de DefaultCommandPrefix sleutel.

Ondersteunende paden op niet-Windows-systemen

Niet-Windows-platforms gebruiken het dubbele punt (:) als padscheidingsteken en een slash (/) als scheidingsteken voor mappen. De [System.IO.Path]-klasse bevat statische leden die kunnen worden gebruikt om uw code op elk platform te laten werken:

  • [System.IO.Path]::PathSeparator : retourneert het teken dat wordt gebruikt om paden te scheiden in een PATH-omgevingsvariabele voor het hostplatform
  • [System.IO.Path]::DirectorySeparatorChar : retourneert het teken dat wordt gebruikt om mapnamen te scheiden met een pad voor het hostplatform

Gebruik deze statische eigenschappen in plaats van de ; en \ tekens wanneer u padtekenreeksen maakt.

Zie ook

about_Command_Precedence

een Windows PowerShell-module schrijven