about_Module_Manifests

Kort beskrivning

Beskriver inställningarna och metoderna för att skriva modulmanifestfiler.

Lång beskrivning

Ett modulmanifest är en PowerShell-datafil (.psd1) som innehåller en hash-tabell. Nyckel/värde-paren i hash-tabellen beskriver innehållet och attributen i modulen, definierar förutsättningarna och styr hur komponenterna bearbetas.

Manifest krävs inte för att läsa in en modul, men de krävs för att publicera en modul till PowerShell-galleriet. Med manifest kan du också skilja modulens implementering från hur den läses in. Med ett manifest kan du definiera krav, kompatibilitet, inläsningsordning med mera.

När du använder New-ModuleManifest utan att ange några parametrar för manifestets inställningar skrivs en minimal manifestfil. Kodfragmentet nedan visar den här standardutdatan, snipped av kommentarer och avstånd för korthet:

@{
# RootModule = ''
ModuleVersion = '1.0'
# CompatiblePSEditions = @()
GUID = 'e7184b71-2527-469f-a50e-166b612dfb3b'
Author = 'username'
CompanyName = 'Unknown'
Copyright = '(c) 2022 username. All rights reserved.'
# Description = ''
# PowerShellVersion = ''
# PowerShellHostName = ''
# PowerShellHostVersion = ''
# DotNetFrameworkVersion = ''
# CLRVersion = ''
# ProcessorArchitecture = ''
# RequiredModules = @()
# RequiredAssemblies = @()
# ScriptsToProcess = @()
# TypesToProcess = @()
# FormatsToProcess = @()
# NestedModules = @()
FunctionsToExport = @()
CmdletsToExport = @()
VariablesToExport = '*'
AliasesToExport = @()
# DscResourcesToExport = @()
# ModuleList = @()
# FileList = @()
PrivateData = @{
    PSData = @{
        # Tags = @()
        # LicenseUri = ''
        # ProjectUri = ''
        # IconUri = ''
        # ReleaseNotes = ''
    } # End of PSData hashtable
} # End of PrivateData hashtable
# HelpInfoURI = ''
# DefaultCommandPrefix = ''
}

Du kan använda Test-ModuleManifest för att verifiera ett modulmanifest innan du publicerar modulen. Test-ModuleManifest returnerar ett fel om manifestet är ogiltigt eller om modulen inte kan importeras till den aktuella sessionen eftersom sessionen inte uppfyller kraven i manifestet.

Använda skriptkod i ett modulmanifest

De värden som tilldelats inställningarna i manifestfilen kan vara uttryck som utvärderas av PowerShell. På så sätt kan du skapa sökvägar och villkorligt tilldela värden baserat på variabler.

När du importerar en modul med utvärderas Import-Modulemanifestet i Restricted språkläge. Restricted -läget begränsar de kommandon och variabler som kan användas.

Tillåtna kommandon

  • Import-LocalizedData
  • ConvertFrom-StringData
  • Write-Host
  • Out-Host
  • Join-Path

Tillåtna variabler

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Alla miljövariabler, till exempel $ENV:TEMP

Mer information finns i about_Language_Modes.

Manifestinställningar

I följande avsnitt beskrivs alla tillgängliga inställningar i ett modulmanifest och hur du kan använda dem. De börjar med en sammanfattning av inställningen och följs av en matris som visar:

  • Indatatyp: Den objekttyp som du kan ange för den här inställningen i manifestet.
  • Obligatoriskt: Om det här värdet är Yeskrävs inställningen både för att importera modulen och publicera den till PowerShell-galleriet. Om det är No, krävs det inte för någotdera. Om det är PowerShell Gallerykrävs det bara för publicering till PowerShell-galleriet.
  • Värde om det tas bort: Värdet som den här inställningen har när den importeras och inte uttryckligen anges.
  • Accepterar jokertecken: Om den här inställningen kan ta ett jokerteckenvärde eller inte.

RootModule

Den här inställningen anger modulens primära fil eller rotfil. När modulen importeras importeras de medlemmar som exporteras av rotmodulfilen till anroparens sessionstillstånd.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Värdet måste vara sökvägen till något av följande:

  • ett skript (.ps1)
  • en skriptmodul (.psm1)
  • ett modulmanifest (.psd1)
  • en sammansättning (.dll)
  • en XML-fil för cmdlet-definition (.cdxml)
  • ett Windows PowerShell 5.1-arbetsflöde (.xaml)

Sökvägen ska vara relativ till modulmanifestet.

Om ett modulmanifest inte har någon rotfil har angetts i RootModule-nyckeln blir manifestet den primära filen för modulen och modulen blir en manifestmodul (ModuleType = Manifest). När RootModule har definierats bestäms modulens typ från filtillägget som används:

  • a .ps1 eller .psm1 fil gör modultypen Skript
  • en .psd1 fil gör modultypen Manifest
  • en .dll fil gör modultypen Binär
  • en .cdxml fil gör modultypen CIM
  • en .xaml fil gör modultypen Arbetsflöde

Som standard exporteras alla modulmedlemmar i RootModule .

Dricks

Modulinläsningshastigheten skiljer sig mellan modultyperna Binär, Skript och CIM . Mer information finns i PowerShell-modulredigeringsöverväganden

Den här modulens ModuleType är till exempel Manifest. De enda modulmedlemmar som den här modulen kan exportera är de som definieras i de moduler som anges med inställningen NestedModules .

@{
    RootModule = ''
}

Kommentar

Den här inställningen kan också anges i modulmanifest som ModuleToProcess. Även om det namnet för den här inställningen är giltigt är det bästa praxis att använda RootModule i stället.

ModuleVersion

Den här inställningen anger versionen av modulen. När det finns flera versioner av en modul i ett system läses den senaste versionen in som standard när du kör Import-Module.

Värde
Indatatyp System.String
Krävs Ja
Värde om det tas bort Ingen
Accepterar jokertecken Nej

Värdet för den här inställningen måste konverteras till System.Version när du kör Import-Module.

Det här manifestet deklarerar till exempel modulens version som '1.2.3'.

@{
    ModuleVersion = '1.2.3'
}

När du importerar modulen och kontrollerar egenskapen Version bör du tänka på att det är ett System.Version-objekt och inte en sträng:

$ExampleModule = Import-Module example.psd1
$ExampleModule.Version
$ExampleModule.Version.GetType().Name
Major  Minor  Build  Revision
-----  -----  -----  --------
1      2      3      -1

Version

CompatiblePSEditions

Den här inställningen anger modulens kompatibla PSEditions.

Värde
Indatatyp System.String[]
Godkända värden Desktop, Core
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Om värdet för den här inställningen är $nullkan modulen importeras oavsett PSEdition för sessionen. Du kan ange ett eller flera av de godkända värdena.

Information om PSEdition finns i:

När den här inställningen har definierats kan modulen endast importeras till en session där värdet för den $PSEdition automatiska variabeln ingår i inställningen.

Kommentar

Eftersom den $PSEdition automatiska variabeln introducerades i version 5.1 kan äldre versioner av Windows PowerShell inte läsa in en modul som använder inställningen CompatiblePSEditions .

Du kan till exempel importera det här modulmanifestet i valfri session:

@{
    # CompatiblePSEditions = @()
}

Med den angivna inställningen kan den här modulen endast importeras i sessioner där den $PSEdition automatiska variabelns värde är Core.

@{
    CompatiblePSEditions = @('Core')
}

GUID

Den här inställningen anger en unik identifierare för modulen. GUID används för att skilja mellan moduler med samma namn.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort 00000000-0000-0000-0000-000000000000
Accepterar jokertecken Nej

Värdet för den här inställningen måste konverteras till System.Guid när du kör Import-Module.

Varning

Det är inte en obligatorisk inställning, men att inte ange ett GUID i ett manifest har inga fördelar och kan leda till namnkollisioner för moduler.

Du kan skapa ett nytt guid som ska användas i manifestet:

New-Guid | Select-Object -ExpandProperty Guid
8456b025-2fa5-4034-ae47-e6305f3917ca
@{
    GUID = '8456b025-2fa5-4034-ae47-e6305f3917ca'
}

Om det finns en annan modul på datorn med samma namn kan du fortfarande importera den du vill ha genom att ange modulens fullständigt kvalificerade namn:

Import-Module -FullyQualifiedName @{
    ModuleName    = 'Example'
    GUID          = '8456b025-2fa5-4034-ae47-e6305f3917ca'
    ModuleVersion = '1.0.0'
}

Författare

Den här inställningen identifierar modulförfattaren.

Värde
Indatatyp System.String
Krävs PowerShell-galleriet
Värde om det tas bort $null
Accepterar jokertecken Nej

Det här manifestet förklarar att modulens författare är Contoso Developer Experience Team.

@{
    Author = 'Contoso Developer Experience Team'
}

CompanyName

Den här inställningen identifierar företaget eller leverantören som skapade modulen.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Det här manifestet deklarerar att modulen skapades av Contoso, Ltd.

@{
    CompanyName = 'Contoso, Ltd.'
}

Den här inställningen anger en copyright-instruktion för modulen.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Detta manifest deklarerar ett upphovsrättsmeddelande som reserverar alla rättigheter till Contoso, Ltd. från och med 2022.

@{
    Copyright = '(c) 2022 Contoso, Ltd. All rights reserved.'
}

beskrivning

Den här inställningen beskriver modulen på hög nivå.

Värde
Indatatyp System.String
Krävs PowerShell-galleriet
Värde om det tas bort $null
Accepterar jokertecken Nej

Det här manifestet innehåller en kort beskrivning. Du kan också använda en här-sträng för att skriva en längre eller flerradsbeskrivning.

@{
    Description = 'Example commands to show a valid module manifest'
}

PowerShellVersion

Den här inställningen anger den lägsta versionen av PowerShell som krävs för den här modulen.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Värdet för den här inställningen måste konverteras till System.Version när du kör Import-Module.

Om den här inställningen inte har angetts begränsar PowerShell inte modulens import baserat på den aktuella versionen.

Det här manifestet deklarerar till exempel att modulen är kompatibel med alla versioner av PowerShell och Windows PowerShell.

@{
    # PowerShellVersion = ''
}

Med PowerShellVersion inställt på 7.2kan du bara importera modulen i PowerShell 7.2 eller senare.

@{
    PowerShellVersion = '7.2'
}

PowerShellHostName

Den här inställningen anger namnet på det PowerShell-värdprogram som modulen kräver, till exempel Windows PowerShell ISE-värd eller ConsoleHost.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Du hittar namnet på värden för en session med -instruktionen $Host.Name . Du kan till exempel se att värden för en fjärrsession är ServerRemoteHost i stället för ConsoleHost:

$Host.Name
Enter-PSSession -ComputerName localhost
$Host.Name
ConsoleHost
[localhost]: PS C:\Users\username\Documents> $Host.Name
ServerRemoteHost

Den här modulen kan importeras till valfri värd.

@{
    # PowerShellHostName = ''
}

Med PowerShellHostName inställt på ServerRemoteHostkan du bara importera modulen i en powershell-fjärrsession.

@{
    PowerShellHostName = 'ServerRemoteHost'
}

PowerShellHostVersion

Den här inställningen anger den lägsta versionen av ett PowerShell-värdprogram som modulen kräver.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Värdet för den här inställningen måste konverteras till System.Version när du kör Import-Module.

Varning

Även om den här inställningen kan användas utan PowerShellHostName-inställningen ökar oddsen för oväntat beteende. Använd endast den här inställningen när du också använder inställningen PowerShellHostName .

Det här manifestets modul kan till exempel importeras från valfri PowerShell-session som körs i ConsoleHost, oavsett värdens version.

@{
    PowerShellHostName = 'ConsoleHost'
    # PowerShellHostVersion = ''
}

Med PowerShellHostVersion inställt på 5.1kan du bara importera modulen från en PowerShell-session som körs i ConsoleHost där värdens version är 5.1 eller senare.

@{
    PowerShellHostName    = 'ConsoleHost'
    PowerShellHostVersion = '5.1'
}

DotNetFrameworkVersion

Den här inställningen anger den lägsta version av Microsoft .NET Framework som modulen kräver.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Kommentar

Den här inställningen är endast giltig för PowerShell Desktop-versionen, till exempel Windows PowerShell 5.1, och gäller endast för .NET Framework-versioner som är lägre än 4,5. Det här kravet har ingen effekt för nyare versioner av PowerShell eller .NET Framework.

Värdet för den här inställningen måste konverteras till System.Version när du kör Import-Module.

Det här manifestet deklarerar till exempel att dess modul kan importeras i valfri PowerShell- eller Windows PowerShell-session, oavsett version av Microsoft .NET Framework.

@{
    # DotNetFrameworkVersion = ''
}

Med DotNetFrameworkVersion inställt på 4.0kan du importera den här modulen i valfri session i Windows PowerShell där den senaste tillgängliga versionen av Microsoft .NET Framework är minst 4.0. Du kan också importera den i valfri PowerShell-session.

@{
    DotNetFrameworkVersion = '4.0'
}

CLRVersion

Den här inställningen anger den lägsta versionen av COMMON Language Runtime (CLR) för Microsoft .NET Framework som modulen kräver.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Kommentar

Den här inställningen är endast giltig för PowerShell Desktop-versionen, till exempel Windows PowerShell 5.1, och gäller endast för .NET Framework-versioner som är lägre än 4,5. Det här kravet har ingen effekt för nyare versioner av PowerShell eller .NET Framework.

Värdet för den här inställningen måste konverteras till System.Version när du kör Import-Module.

Det här manifestet deklarerar till exempel att dess modul kan importeras i valfri PowerShell- eller Windows PowerShell-session, oavsett vilken version av Microsoft .NET Frameworks CLR-version som helst.

@{
    # CLRVersion = ''
}

Med CLRVersion inställt 4.0på kan du importera den här modulen i alla sessioner i Windows PowerShell där den senaste tillgängliga versionen av CLR är minst 4.0. Du kan också importera den i valfri PowerShell-session.

@{
    CLRVersion = '4.0'
}

ProcessorArchitecture

Den här inställningen anger den processorarkitektur som modulen kräver.

Värde
Indatatyp System.String
Godkända värden None, MSIL, X86, IA64, , , Amd64Arm
Krävs Nej
Värde om det tas bort None
Accepterar jokertecken Nej

Värdet för den här inställningen måste konverteras till System.Reflection.ProcessorArchitecture när du kör Import-Module.

Det här manifestet deklarerar till exempel att dess modul kan importeras i valfri session, oavsett systemets processorarkitektur.

@{
    # ProcessorArchitecture = ''
}

Med ProcessorArchitecture inställt Amd64på kan du bara importera den här modulen i en session som körs på en dator med en matchande arkitektur.

@{
    ProcessorArchitecture = 'Amd64'
}

RequiredModules

Den här inställningen anger moduler som måste vara i det globala sessionstillståndet. Om de moduler som krävs inte är i det globala sessionstillståndet importerar PowerShell dem. Om de moduler som krävs inte är tillgängliga misslyckas Import-Module kommandot.

Värde
Indatatyp System.String[], System.Collections.Hashtable[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Poster för den här inställningen kan vara ett modulnamn, en fullständig modulspecifikation eller en sökväg till en modulfil.

När värdet är en sökväg kan sökvägen vara fullständigt kvalificerad eller relativ.

När värdet är ett namn eller en modulspecifikation söker PowerShell i PSModulePath efter den angivna modulen.

En modulspecifikation är en hash-tabell som har följande nycklar.

  • ModuleName - Obligatoriska. Anger modulnamnet.
  • GUID - Valfritt. Anger GUID för modulen.
  • Det är också Obligatoriskt att ange minst en av de tre nycklarna nedan. Nyckeln RequiredVersion kan inte användas med ModuleVersion nycklarna eller MaximumVersion . Du kan definiera ett acceptabelt versionsintervall för modulen genom att ModuleVersion ange nycklarna och MaximumVersion tillsammans.
    • ModuleVersion – Anger en lägsta godtagbar version av modulen.
    • RequiredVersion – Anger en exakt, nödvändig version av modulen.
    • MaximumVersion – Anger den maximala godkända versionen av modulen.

Kommentar

RequiredVersion lades till i Windows PowerShell 5.0. MaximumVersion lades till i Windows PowerShell 5.1.

Det här manifestet deklarerar till exempel att modulen inte kräver några andra moduler för dess funktioner.

@{
    # RequiredModules = @()
}

Det här manifestet deklarerar att det kräver PSReadLine-modulen. När du kör Import-Module det här manifestet importerar PowerShell den senaste versionen av PSReadLine som är tillgänglig för sessionen. Om ingen version är tillgänglig returnerar importen ett fel.

@{
    RequiredModules = @(
        'PSReadLine'
    )
}

Dricks

I PowerShell 2.0 Import-Module importerar du inte nödvändiga moduler automatiskt. Det verifierar bara att de moduler som krävs är i det globala sessionstillståndet.

Det här manifestet deklarerar att det kräver en version av PSReadLine-modulen som finns i den egna modulmappen. När du kör Import-Module det här manifestet importerar PowerShell den leverantörskopplade PSReadLine från den angivna sökvägen.

@{
    RequiredModules = @(
        'Vendored\PSReadLine\PSReadLine.psd1'
    )
}

Det här manifestet deklarerar att det specifikt kräver version 2.0.0 av PSReadLine-modulen. När du kör Import-Module det här manifestet importerar PowerShell version 2.0.0 av PSReadLine om den är tillgänglig. Om den inte är tillgänglig Import-Module returnerar ett fel.

@{
    RequiredModules = @(
        @{
            ModuleName      = 'PSReadLine'
            RequiredVersion = '2.0.0'
        }
    )
}

Det här manifestet deklarerar att det kräver att PSReadLine-modulen importeras i version 2.0.0 eller senare.

@{
    RequiredModules = @(
        @{
            ModuleName    = 'PSReadLine'
            ModuleVersion = '2.0.0'
        }
    )
}

Det här manifestet deklarerar att det kräver att PSReadLine-modulen importeras i version 2.0.0 eller lägre.

@{
    RequiredModules = @(
        @{
            ModuleName     = 'PSReadLine'
            MaximumVersion = '2.0.0'
        }
    )
}

Det här manifestet deklarerar att det kräver att modulen PSDesiredStateConfiguration importeras med en version som är lika med eller högre än 2.0.0 men inte högre än 2.99.99.

@{
    RequiredModules = @(
        @{
            ModuleName     = 'PSDesiredStateConfiguration'
            ModuleVersion  = '2.0.0'
            MaximumVersion = '2.99.99'
        }
    )
}

RequiredAssemblies

Den här inställningen anger de sammansättningsfiler (.dll) som modulen kräver. PowerShell läser in de angivna sammansättningarna innan du uppdaterar typer eller format, importerar kapslade moduler eller importerar modulfilen som anges i värdet för RootModule-nyckeln .

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Poster för den här inställningen kan vara filnamnet för en sammansättning eller sökvägen till en. Visa en lista över alla obligatoriska sammansättningar, även om de också visas som binära moduler i inställningen NestedModules .

Det här manifestet example.dll kräver sammansättningen. Innan du läser in formaterings- eller typfiler som anges i det här manifestet läser PowerShell in example.dll från Assemblies mappen som finns i samma katalog som modulmanifestet.

@{
    RequiredAssemblies = @(
        'Assemblies\Example.dll'
    )
}

ScriptsToProcess

Den här inställningen anger skriptfiler (.ps1) som körs i anroparens sessionstillstånd när modulen importeras. Du kan använda dessa skript för att förbereda en miljö, precis som du kan använda ett inloggningsskript.

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Om du vill ange skript som körs i modulens sessionstillstånd använder du nyckeln NestedModules .

När du importerar det här manifestet Initialize.ps1 kör PowerShell i den aktuella sessionen.

@{
    ScriptsToProcess = @(
        'Scripts\Initialize.ps1'
    )
}

Om du till exempel Initialize.ps1 skriver informationsmeddelanden och anger variabeln $ExampleState :

if ([string]::IsNullOrEmpty($ExampleState)) {
    Write-Information "Example not initialized."
    Write-Information "Initializing now..."
    $ExampleState = 'Initialized'
} else {
    Write-Information "Example already initialized."
}

När du importerar modulen körs skriptet, skriver de meddelandena och inställningen $ExampleState i sessionen.

$InformationPreference = 'Continue'
"Example State is: $ExampleState"
Import-Module .\example7x.psd1
"Example State is: $ExampleState"
Import-Module .\example7x.psd1 -Force
Example State is:

Example not initialized.
Initializing now...

Example State is: Initialized

Example already initialized.

TypesToProcess

Den här inställningen anger vilka typfiler (.ps1xml) som körs när modulen importeras.

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

När du importerar modulen kör PowerShell cmdleten Update-TypeData med de angivna filerna. Eftersom typfiler inte är begränsade påverkar de alla sessionstillstånd i sessionen.

Mer information om typfiler finns i about_Types.ps1xml

När du till exempel importerar det här manifestet läser PowerShell in de typer som anges i Example.ps1xml filen från Types mappen som finns i samma katalog som modulmanifestet.

@{
    TypesToProcess = @(
        'Types\Example.ps1xml'
    )
}

FormatsToProcess

Den här inställningen anger de formateringsfiler (.ps1xml) som körs när modulen importeras.

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

När du importerar en modul kör PowerShell cmdleten Update-FormatData med de angivna filerna. Eftersom formateringsfiler inte är begränsade påverkar de alla sessionstillstånd i sessionen.

Mer information om typfiler finns i about_Format.ps1xml

När du till exempel importerar den här modulen läser PowerShell in de format som anges i Example.ps1xml filen från Formats mappen som finns i samma katalog som modulmanifestet.

@{
    FormatsToProcess = @(
        'Formats\Example.ps1xml'
    )
}

NestedModules

Den här inställningen anger skriptmoduler (.psm1) och binära moduler (.dll) som importeras till modulens sessionstillstånd. Du kan också ange skriptfiler (.ps1). Filerna i den här inställningen körs i den ordning de visas.

Värde
Indatatyp System.String[], System.Collections.Hashtable[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Poster för den här inställningen kan vara ett modulnamn, en fullständig modulspecifikation eller en sökväg till en modul eller skriptfil.

När värdet är en sökväg kan sökvägen vara fullständigt kvalificerad eller relativ.

När värdet är ett modulnamn eller en specifikation söker PowerShell i PSModulePath efter den angivna modulen.

En modulspecifikation är en hash-tabell som har följande nycklar.

  • ModuleName - Obligatoriska. Anger modulnamnet.
  • GUID - Valfritt. Anger GUID för modulen.
  • Det är också Obligatoriskt att ange minst en av de tre nycklarna nedan. Nyckeln RequiredVersion kan inte användas med ModuleVersion nycklarna eller MaximumVersion . Du kan definiera ett acceptabelt versionsintervall för modulen genom att ModuleVersion ange nycklarna och MaximumVersion tillsammans.
    • ModuleVersion – Anger en lägsta godtagbar version av modulen.
    • RequiredVersion – Anger en exakt, nödvändig version av modulen.
    • MaximumVersion – Anger den maximala godkända versionen av modulen.

Kommentar

RequiredVersion lades till i Windows PowerShell 5.0. MaximumVersion lades till i Windows PowerShell 5.1.

Alla objekt som behöver exporteras från en kapslad modul måste exporteras av den kapslade modulen med hjälp av cmdleten Export-ModuleMember eller visas i någon av exportegenskaperna:

  • FunctionsToExport
  • CmdletsToExport
  • VariablesToExport
  • AliasToExportera

Kapslade moduler i modulsessionstillståndet är tillgängliga för rotmodulen, men de returneras inte av ett Get-Module kommando i anroparens sessionstillstånd.

Skript (.ps1) som anges i den här inställningen körs i modulens sessionstillstånd, inte i anroparens sessionstillstånd. Om du vill köra ett skript i anroparens sessionstillstånd listar du skriptfilnamnet i inställningen ScriptsToProcess .

När du till exempel importerar det här manifestet läses modulen Helpers.psm1 in i rotmodulens sessionstillstånd. Alla cmdletar som deklareras i den kapslade modulen exporteras om inget annat är begränsat.

@{
    NestedModules = @(
        'Helpers\Helpers.psm1'
    )
}

FunctionsToExport

Den här inställningen anger de funktioner som modulen exporterar. Du kan använda den här inställningen för att begränsa de funktioner som exporteras av modulen. Det kan ta bort funktioner från listan över exporterade funktioner, men det kan inte lägga till funktioner i listan.

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Ja

Du kan ange poster i den här inställningen med jokertecken. Alla matchande funktioner i listan över exporterade funktioner exporteras.

Dricks

För prestanda och identifiering bör du alltid uttryckligen lista de funktioner som du vill att modulen ska exportera i den här inställningen utan att använda jokertecken.

När du till exempel importerar en modul med inställningen utkommenterad exporteras alla funktioner i rotmodulen och eventuella kapslade moduler.

@{
    # FunctionsToExport = @()
}

Det här manifestet är funktionellt identiskt med att inte ange inställningen alls.

@{
    FunctionsToExport = '*'
}

När FunctionsToExport har angetts som en tom matris finns inga funktioner tillgängliga för rotmodulen eller någon kapslad modulexport när du importerar den här modulen.

@{
    FunctionsToExport = @()
}

Kommentar

Om du skapar modulmanifestet New-ModuleManifest med kommandot och inte anger parametern FunctionsToExport , har det skapade manifestet den här inställningen angiven som en tom matris. Såvida du inte redigerar manifestet exporteras inga funktioner från modulen.

Med FunctionsToExport inställt på att endast inkludera Get-Example funktionen görs funktionen tillgänglig när du importerar den här modulen Get-Example , även om andra funktioner exporterades av rotmodulen eller kapslade moduler.

@{
    FunctionsToExport = @(
        'Get-Example'
    )
}

Med FunctionsToExport inställt med en jokerteckensträng, när du importerar den här modulen görs alla funktioner vars namn slutar med Example tillgängliga, även om andra funktioner exporterades som modulmedlemmar av rotmodulen eller kapslade moduler.

@{
    FunctionsToExport = @(
        '*Example'
    )
}

CmdletsToExport

Den här inställningen anger de cmdletar som modulen exporterar. Du kan använda den här inställningen för att begränsa de cmdletar som exporteras av modulen. Den kan ta bort cmdletar från listan över exporterade modulmedlemmar, men det kan inte lägga till cmdletar i listan.

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Ja

Du kan ange poster i den här inställningen med jokertecken. Alla matchande cmdletar i listan över exporterade cmdletar exporteras.

Dricks

För prestanda och identifiering bör du alltid uttryckligen lista de cmdletar som du vill att modulen ska exportera i den här inställningen utan att använda jokertecken.

När du till exempel importerar en modul med den här inställningen utkommenterad exporteras alla cmdletar i rotmodulen och alla kapslade moduler.

@{
    # CmdletsToExport = @()
}

Det här manifestet är funktionellt identiskt med att inte ange inställningen alls.

@{
    CmdletsToExport = '*'
}

Med CmdletsToExport inställt som en tom matris är rotmodulen eller någon kapslad modulexport tillgänglig när du importerar den här modulen.

@{
    CmdletsToExport = @()
}

Kommentar

Om du skapar modulmanifestet New-ModuleManifest med kommandot och inte anger parametern CmdletsToExport har det skapade manifestet den här inställningen angiven som en tom matris. Såvida du inte redigerar manifestet exporteras inga cmdletar från modulen.

Med CmdletsToExport inställt på att endast inkludera cmdleten Get-Example görs cmdleten tillgänglig när du importerar den här modulen Get-Example , även om andra cmdletar exporterades av rotmodulen eller kapslade moduler.

@{
    CmdletsToExport = @(
        'Get-Example'
    )
}

Med CmdletsToExport inställt med en jokerteckensträng, när du importerar den här modulen görs alla cmdletar vars namn slutar med Example tillgängliga, även om andra cmdletar exporterades som modulmedlemmar av rotmodulen eller några kapslade moduler.

@{
    CmdletsToExport = @(
        '*Example'
    )
}

VariablesToExport

Den här inställningen anger de variabler som modulen exporterar. Du kan använda den här inställningen för att begränsa de variabler som exporteras av modulen. Det kan ta bort variabler från listan över exporterade modulmedlemmar, men det kan inte lägga till variabler i listan.

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Ja

Du kan ange poster i den här inställningen med jokertecken. Alla matchande variabler i listan över exporterade modulmedlemmar exporteras.

Dricks

För prestanda och identifiering bör du alltid uttryckligen lista de variabler som du vill att modulen ska exportera i den här inställningen utan att använda jokertecken.

När du till exempel importerar en modul med den här inställningen utkommenterad exporteras alla variabler i rotmodulen och eventuella kapslade moduler.

@{
    # VariablesToExport = @()
}

Det här manifestet är funktionellt identiskt med att inte ange inställningen alls.

@{
    VariablesToExport = '*'
}

Kommentar

Om du skapar modulmanifestet New-ModuleManifest med kommandot och inte anger parametern VariablesToExport har det skapade manifestet den här inställningen angiven som '*'. Om du inte redigerar manifestet exporteras alla variabler från modulen.

Med VariablesToExport inställt som en tom matris är inga variabler för rotmodulen eller någon kapslad modulexport tillgängliga när du importerar den här modulen.

@{
    VariablesToExport = @()
}

Med VariablesToExport inställt på att endast inkludera variabeln SomeExample görs variabeln tillgänglig när du importerar den här modulen $SomeExample , även om andra variabler exporterades av rotmodulen eller kapslade moduler.

@{
    VariablesToExport = @(
        'SomeExample'
    )
}

Med VariablesToExport inställt med en jokerteckensträng, när du importerar den här modulen görs alla variabler vars namn slutar med Example tillgängliga, även om andra variabler exporterades som modulmedlemmar av rotmodulen eller några kapslade moduler.

@{
    VariablesToExport = @(
        '*Example'
    )
}

DscResourcesToExport

Den här inställningen anger de DSC-resurser som modulen exporterar. Du kan använda den här inställningen för att begränsa de klassbaserade DSC-resurser som exporteras av modulen. Den kan ta bort DSC-resurser från listan över exporterade modulmedlemmar, men det går inte att lägga till DSC-resurser i listan.

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Ja

Du kan ange poster i den här inställningen med jokertecken. Alla matchande klassbaserade DSC-resurser i modulen exporteras.

Dricks

För identifiering bör du alltid uttryckligen lista alla DSC-resurser som din modul exporterar.

Mer information om hur du redigerar och använder DSC-resurser finns i dokumentationen för DSC.

Det här manifestet exporterar alla klassbaserade och MOF-baserade DSC-resurser som definierats i rotmodulen och eventuella kapslade moduler.

@{
    # DscResourcesToExport = @()
}

Det här manifestet exporterar alla MOF-baserade DSC-resurser som definierats i rotmodulen och alla kapslade moduler, men bara en klassbaserad DSC-resurs, ExampleClassResource.

@{
    DscResourcesToExport = @(
        'ExampleClassResource'
    )
}

Det här manifestet exporterar alla DSC-resurser som ingår. Även om den MOF-baserade resursen inte fanns med i listan skulle modulen fortfarande exportera den.

@{
    DscResourcesToExport = @(
        'ExampleClassResource'
        'ExampleMofResourceFirst'
    )
}

ModuleList

Den här inställningen är en informationslagerlista över de moduler som ingår i den här. Den här listan påverkar inte modulens beteende.

Värde
Indatatyp System.String[], System.Collections.Hashtable[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Poster för den här inställningen kan vara ett modulnamn, en fullständig modulspecifikation eller en sökväg till en modul eller skriptfil.

När värdet är en sökväg kan sökvägen vara fullständigt kvalificerad eller relativ.

När värdet är ett modulnamn eller en specifikation söker PowerShell i PSModulePath efter den angivna modulen.

En modulspecifikation är en hash-tabell som har följande nycklar.

  • ModuleName - Obligatoriska. Anger modulnamnet.
  • GUID - Valfritt. Anger GUID för modulen.
  • Det är också Obligatoriskt att ange minst en av de tre nycklarna nedan. Nyckeln RequiredVersion kan inte användas med ModuleVersion nycklarna eller MaximumVersion . Du kan definiera ett acceptabelt versionsintervall för modulen genom att ModuleVersion ange nycklarna och MaximumVersion tillsammans.
    • ModuleVersion – Anger en lägsta godtagbar version av modulen.
    • RequiredVersion – Anger en exakt, nödvändig version av modulen.
    • MaximumVersion – Anger den maximala godkända versionen av modulen.

Kommentar

RequiredVersion lades till i Windows PowerShell 5.0. MaximumVersion lades till i Windows PowerShell 5.1.

Det här manifestet innehåller ingen informationslista över de moduler som ingår. Den kanske eller kanske inte har moduler. Även om den här inställningen inte har angetts fungerar alla moduler som anges i inställningarna RootModule, ScriptsToProcess eller NestedModules fortfarande normalt.

@{
    # ModuleList = @()
}

Det här manifestet deklarerar att de enda modulerna som ingår är Example.psm1 och undermodulerna First.psm1 och Second.psm1 i Submodules mappen.

@{
    ModuleList = @(
        'Example.psm1'
        'Submodules\First.psm1'
        'Submodules\Second.psm1'
    )
}

Filförteckning

Den här inställningen är en informationslagerlista över de filer som ingår i den här modulen. Den här listan påverkar inte modulens beteende.

Värde
Indatatyp System.String[]
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Ja

Poster för den här inställningen ska vara den relativa sökvägen till en fil från mappen som innehåller modulmanifestet.

När en användare anropar Get-Module mot ett manifest med den här inställningen definierad innehåller egenskapen FileList den fullständiga sökvägen till dessa filer och ansluter modulens sökväg till varje posts relativa sökväg.

Det här manifestet innehåller inte en lista över dess filer.

@{
    # FileList = @()
}

Det här manifestet deklarerar att de enda filer som ingår visas i den här inställningen.

@{
    FileList = @(
        'Example.psd1'
        'Example.psm1'
        'Assemblies\Example.dll'
        'Scripts\Initialize.ps1'
        'Submodules\First.psm1'
        'Submodules\Second.psm1'
    )
}

PrivateData

Den här inställningen definierar en hash-tabell med data som är tillgänglig för alla kommandon eller funktioner i rotmodulens omfång.

Värde
Indatatyp System.Collections.Hashtable
Krävs PowerShell-galleriet, Crescendo
Värde om det tas bort $null
Accepterar jokertecken Nej

När du exporterar ett Crescendo-manifest för att skapa en ny modul lägger Export-CrescendoModule du till två nycklar till PrivateData

  • CrescendoGenerated – tidsstämpel när modulen exporterades
  • CrescendoVersion – den version av Crescendo som används för att exportera modulen

Du kan lägga till egna nycklar för att lagra metadata som du vill spåra. Alla nycklar som läggs till i den här inställningen är tillgängliga för funktioner och cmdletar i rotmodulen med hjälp av $MyInvocation.MyCommand.Module.PrivateData. Hash-tabellen är inte tillgänglig i själva modulomfånget, bara i cmdletar som du definierar i modulen.

Det här manifestet definierar till exempel nyckeln PublishedDate i PrivateData.

@{
    PrivateData = @{
        PublishedDate = '2022-06-01'
    }
}

Cmdletar i modulen kan komma åt det här värdet med variabeln $MyInvocation .

Function Get-Stale {
    [CmdletBinding()]
    param()

    $PublishedDate = $MyInvocation.MyCommand.Module.PrivateData.PublishedDate
    $CurrentDate = Get-Date

    try {
        $PublishedDate = Get-Date -Date $PublishedDate -ErrorAction Stop
    } catch {
        # The date was set in the manifest, set to an invalid value, or
        # the script module was directly imported without the manifest.
        Throw "Unable to determine published date. Check the module manifest."
    }

    if ($CurrentDate -gt $PublishedDate.AddDays(30)) {
        Write-Warning "This module version was published more than 30 days ago."
    } else {
        $TimeUntilStale = $PublishedDate.AddDays(30) - $CurrentDate
        "This module will be stale in $($TimeUntilStale.Days) days"
    }
}

När modulen har importerats använder funktionen värdet från PrivateData för att avgöra när modulen publicerades.

Get-Stale -TestDate '2022-06-15'
Get-Stale -TestDate '2022-08-01'
This module will be stale in 16 days

WARNING: This module version was published more than 30 days ago.

PrivateData.PSData

Den underordnade PSData-egenskapen definierar en hash-tabell med värden som stöder specifika tilläggsscenarier.

Värde
Indatatyp System.Collections.Hashtable
Krävs PowerShell-galleriet, experimentella funktioner, Crescendo-moduler
Värde om det tas bort $null
Accepterar jokertecken Nej

Den underordnade PSData-egenskapen används för följande scenarier:

  • PowerShell-galleriet – När du skapar ett modulmanifest med hjälp av New-ModuleManifest cmdleten fylls PSData-hashtabellen i förväg med platshållarnycklar som behövs när du publicerar modulen till PowerShell-galleriet. Mer information om modulmanifest och publicering till PowerShell-galleriet finns i Paketmanifestvärden som påverkar PowerShell-galleriet användargränssnittet.
  • Experimentella funktioner – Metadata om en experimentell funktion sparas i egenskapen ExperimentalFeatures för PSData. Egenskapen ExperimentalFeatures är en matris med hashtables som innehåller funktionens namn och beskrivning. Mer information finns i Deklarera experimentella funktioner i moduler.
  • Crescendo-moduler – När du exporterar ett Crescendo-manifest för att skapa en ny modul lägger Export-CrescendoModule du till värdet CrescendoBuilt i egenskapen PSData.Tags . Du kan använda den här taggen för att hitta moduler i PowerShell-galleriet som skapades med Crescendo. Mer information finns i Export-CrescendoModule.

HelpInfoURI

Den här inställningen anger Internetadressen för HELPInfo XML-filen för modulen.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Den här inställningens värde måste vara en URI (Uniform Resource Identifier) som börjar med http eller https.

Xml-filen HelpInfo stöder funktionen Updatable Help som introducerades i PowerShell 3.0. Den innehåller information om platsen för nedladdningsbara hjälpfiler för modulen och versionsnumren för de senaste hjälpfilerna för varje språk som stöds.

Information om uppdateringsbar hjälp finns i about_Updatable_Help. Information om XML-filen HelpInfo finns i Support Updatable Help (Stöd för uppdateringsbar hjälp).

Den här modulen har till exempel stöd för uppdaterad hjälp.

@{
    HelpInfoUri = 'http://https://go.microsoft.com/fwlink/?LinkID=603'
}

DefaultCommandPrefix

Den här inställningen anger ett prefix som förbereds för substantiven för alla kommandon i modulen när de importeras till en session. Prefix hjälper till att förhindra konflikter med kommandonamn i en användares session.

Värde
Indatatyp System.String
Krävs Nej
Värde om det tas bort $null
Accepterar jokertecken Nej

Modulanvändare kan åsidosätta det här prefixet genom att ange prefixparametern för cmdleten Import-Module .

Den här inställningen introducerades i PowerShell 3.0.

När det här manifestet importeras har Example alla cmdletar som importerats från den här modulen förberetts till substantivet i deras namn. Till exempel Get-Item importeras som Get-ExampleItem.

@{
    DefaultCommandPrefix = 'Example'
}

Se även