Dela via


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å separera 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 Nokrävs det för ingen av dem. 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 medlemmarna som exporteras av rotmodulfilen till anroparens sessionstillstånd.

Värde
Indatatyp System.String
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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:

  • en .ps1 eller .psm1 en 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 .

Tips

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 = ''
}

Anteckning

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
Obligatoriskt Yes
Värde om det är oet Ingen
Accepterar jokertecken No

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'
}

Observera att det är ett System.Version-objekt och inte en sträng när du importerar modulen och kontrollerar egenskapen Version:

$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
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

Om värdet för den här inställningen är $nullkan modulen importeras oavsett sessionens PSEdition. 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.

Anteckning

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
Obligatoriskt No
Värde om det är oet 00000000-0000-0000-0000-000000000000
Accepterar jokertecken No

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

Varning

Även om det inte är en obligatorisk inställning har det inga fördelar att inte ange ett GUID i ett manifest 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
Obligatoriskt PowerShell-galleriet
Värde om det är oet $null
Accepterar jokertecken No

Det här manifestet deklarerar 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
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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.'
}

Description

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

Värde
Indatatyp System.String
Obligatoriskt PowerShell-galleriet
Värde om det är oet $null
Accepterar jokertecken No

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 beskrivning eller en beskrivning med flera rader.

@{
    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
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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 Inte PowerShell 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
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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 PowerShellHostName-inställningen .

Till exempel kan det här manifestets modul 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 versionen av Microsoft-.NET Framework som modulen kräver.

Värde
Indatatyp System.String
Obligatoriskt No
Värde om det inte har uppställts $null
Accepterar jokertecken No

Anteckning

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

@{
    # DotNetFrameworkVersion = ''
}

Med DotNetFrameworkVersion inställt 4.0på kan du importera den här modulen i valfri session av 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 CLR (Common Language Runtime) för Microsoft .NET Framework som krävs för modulen.

Värde
Indatatyp System.String
Obligatoriskt No
Värde om det inte har uppställts $null
Accepterar jokertecken No

Anteckning

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 Framework CLR-version.

@{
    # CLRVersion = ''
}

Med CLRVersion inställt 4.0på kan du importera den här modulen i valfri session av 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 processorarkitekturen som modulen kräver.

Värde
Indatatyp System.String
Godkända värden None, MSIL, X86, IA64, Amd64, Arm
Obligatoriskt No
Värde om det inte har uppställts None
Accepterar jokertecken No

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 vilken session som helst, 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 globalt sessionstillstånd. 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[]
Obligatoriskt No
Värde om det inte har uppställts $null
Accepterar jokertecken No

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 igenom PSModulePath efter den angivna modulen.

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

  • ModuleName - Krävs. 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 version av modulen som krävs.
    • MaximumVersion – Anger den högsta godkända versionen av modulen.

Anteckning

RequiredVersionlades till i Windows PowerShell 5.0. MaximumVersionlades till i Windows PowerShell 5.1.

Det här manifestet deklarerar till exempel att dess modul 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'
    )
}

Tips

I PowerShell 2.0 Import-Module importeras inte nödvändiga moduler automatiskt. Den verifierar bara att de moduler som krävs är i globalt sessionstillstånd.

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 på det här manifestet importerar PowerShell den leverantörsägda 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 returneras 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 PSReadLine-modulen måste 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[]
Obligatoriskt No
Värde om det inte har uppställts $null
Accepterar jokertecken No

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 nödvändiga 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[]
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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 kör Initialize.ps1 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 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[]
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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 formateringsfilerna (.ps1xml) som körs när modulen importeras.

Värde
Indatatyp System.String[]
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

När du importerar en modul kör PowerShell cmdleten Update-FormatData med de angivna filerna. Eftersom formatering av filer 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 som de visas.

Värde
Indatatyp System.String[], System.Collections.Hashtable[]
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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 - Krävs. 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 version av modulen som krävs.
    • MaximumVersion – Anger den högsta godkända versionen av modulen.

Anteckning

RequiredVersionlades till i Windows PowerShell 5.0. MaximumVersionlades 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 anges 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 anger 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. Den kan ta bort funktioner från listan över exporterade funktioner, men den kan inte lägga till funktioner i listan.

Värde
Indatatyp System.String[]
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken Yes

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

Tips

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 kommenterad exporteras alla funktioner i rotmodulen och alla kapslade moduler.

@{
    # FunctionsToExport = @()
}

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

@{
    FunctionsToExport = '*'
}

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

@{
    FunctionsToExport = @()
}

Anteckning

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 blir 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'
    )
}

När FunctionsToExport har angetts med en jokerteckensträng när du importerar den här modulen blir alla funktioner vars namn slutar med Example tillgängliga, även om andra funktioner exporterades som modulmedlemmar av rotmodulen eller några 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[]
Obligatoriskt No
Värde om det inte har uppställts $null
Accepterar jokertecken Yes

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

Tips

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 kommenterad, 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 = '*'
}

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

@{
    CmdletsToExport = @()
}

Anteckning

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 endast cmdleten tillgänglig när du importerar den här modulen Get-Example , även om andra cmdletar exporterades av rotmodulen eller några kapslade moduler.

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

Med CmdletsToExport inställt med en jokerteckensträng när du importerar den här modulen blir 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[]
Obligatoriskt No
Värde om det inte har uppställts $null
Accepterar jokertecken Yes

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

Tips

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 kommenterad, 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 = '*'
}

Anteckning

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

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

@{
    VariablesToExport = @()
}

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

@{
    VariablesToExport = @(
        'SomeExample'
    )
}

Med VariablesToExport inställt med en jokerteckensträng blir alla variabler vars namn slutar med Example tillgängliga när du importerar den här modulen tillgängliga, även om andra variabler exporterades som modulmedlemmar av rotmodulen eller 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. Det kan ta bort DSC-resurser från listan över exporterade modulmedlemmar, men det kan inte lägga till DSC-resurser i listan.

Värde
Indatatyp System.String[]
Obligatoriskt No
Värde om det inte har uppställts $null
Accepterar jokertecken Yes

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

Tips

För identifiering bör du alltid uttryckligen lista alla DSC-resurser som modulen 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 alla 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 MOF-Based 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[]
Obligatoriskt No
Värde om det inte har uppställts $null
Accepterar jokertecken No

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 - Krävs. 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 version av modulen som krävs.
    • MaximumVersion – Anger den högsta godkända versionen av modulen.

Anteckning

RequiredVersionlades till i Windows PowerShell 5.0. MaximumVersionlades till i Windows PowerShell 5.1.

Manifestet innehåller inte någon informationslista över de moduler som ingår. Det kanske eller kanske inte har moduler. Även om den här inställningen inte anges 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[]
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken Yes

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 det innehåller 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
Obligatoriskt PowerShell-galleriet, Crescendo
Värde om det är oet $null
Accepterar jokertecken No

När du exporterar ett Crescendo-manifest för att skapa en ny modul Export-CrescendoModule lägger du till två nycklar i 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 EGENSKAPEN PSData definierar en hash-tabell med värden som stöder specifika tilläggsscenarier.

Värde
Indatatyp System.Collections.Hashtable
Obligatoriskt PowerShell-galleriet, experimentella funktioner, Crescendo-moduler
Värde om det är oet $null
Accepterar jokertecken No

Den underordnade EGENSKAPEN PSData 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änssnitt.
  • 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
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

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

HelpInfo XML-filen 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 Stöd för uppdateringsbar hjälp.

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

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

DefaultCommandPrefix

Den här inställningen anger ett prefix som läggs till i 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
Obligatoriskt No
Värde om det är oet $null
Accepterar jokertecken No

Modulanvändare kan åsidosätta det här prefixet genom att ange parametern Prefix 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 lagt till substantivet i namnet. Till exempel Get-Item importeras som Get-ExampleItem.

@{
    DefaultCommandPrefix = 'Example'
}

Se även