about_Module_Manifests

Krótki opis

Opisuje ustawienia i rozwiązania dotyczące pisania plików manifestu modułu.

Długi opis

Manifest modułu to plik danych programu PowerShell (.psd1) zawierający tabelę skrótów. Pary klucz-wartość w tabeli skrótów opisują zawartość i atrybuty modułu, definiują wymagania wstępne i kontrolują sposób przetwarzania składników.

Manifesty nie są wymagane do załadowania modułu, ale są one wymagane do opublikowania modułu w Galeria programu PowerShell. Manifesty umożliwiają również oddzielenie implementacji modułu od sposobu ładowania. Za pomocą manifestu można zdefiniować wymagania, zgodność, kolejność ładowania i nie tylko.

W przypadku użycia New-ModuleManifest bez określania żadnych parametrów ustawień manifestu zapisuje minimalny plik manifestu. Poniższy fragment kodu przedstawia te domyślne dane wyjściowe, zwieńczone komentarzem i odstępami dla zwięzłości:

@{
# 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 = ''
}

Aby zweryfikować manifest modułu przed opublikowaniem modułu, możesz użyć polecenia Test-ModuleManifest . Test-ModuleManifest Zwraca błąd, jeśli manifest jest nieprawidłowy lub nie można zaimportować modułu do bieżącej sesji, ponieważ sesja nie spełnia wymagań ustawionych w manifeście.

Używanie kodu skryptu w manifeście modułu

Wartości przypisane do ustawień w pliku manifestu mogą być wyrażeniami, które są oceniane przez program PowerShell. Dzięki temu można tworzyć ścieżki i warunkowo przypisywać wartości na podstawie zmiennych.

Podczas importowania modułu przy użyciu Import-Moduleprogramu manifest jest oceniany w Restricted trybie języka. Restricted mode ogranicza polecenia i zmienne, których można użyć.

Dozwolone polecenia

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

Dozwolone zmienne

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Dowolne zmienne środowiskowe, takie jak $ENV:TEMP

Aby uzyskać więcej informacji, zobacz about_Language_Modes.

Ustawienia manifestu

W poniższych sekcjach szczegółowo opisano każde dostępne ustawienie w manifeście modułu i sposób ich używania. Zaczynają się od synonimu ustawienia i są następnie macierzą zawierającą listę:

  • Typ danych wejściowych: typ obiektu, który można określić dla tego ustawienia w manifeście.
  • Wymagane: jeśli ta wartość to Yes, ustawienie jest wymagane zarówno do zaimportowania modułu, jak i opublikowania go w Galeria programu PowerShell. Jeśli jest Noto , nie jest to wymagane. Jeśli jest to PowerShell Galleryelement , jest wymagany tylko do publikowania w Galeria programu PowerShell.
  • Wartość, jeśli nie ustawiono: wartość tego ustawienia ma wartość zaimportowaną, a nie jawnie ustawioną.
  • Akceptuje symbole wieloznaczne: czy to ustawienie może przyjmować wartość wieloznaczny, czy nie.

Moduł główny

To ustawienie określa plik podstawowy lub główny modułu. Po zaimportowaniu modułu elementy członkowskie wyeksportowane przez plik modułu głównego są importowane do stanu sesji elementu wywołującego.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Wartość musi być ścieżką do jednej z następujących wartości:

  • skrypt (.ps1)
  • moduł skryptu (.psm1)
  • manifest modułu (.psd1)
  • zestaw (.dll)
  • plik XML definicji polecenia cmdlet (.cdxml)
  • przepływ pracy programu Windows PowerShell 5.1 (.xaml)

Ścieżka powinna być względna względem manifestu modułu.

Jeśli manifest modułu nie ma pliku głównego został wyznaczony w kluczu RootModule , manifest staje się plikiem podstawowym modułu, a moduł staje się modułem manifestu (ModuleType = Manifest). Po zdefiniowaniu modułu RootModule typ modułu jest określany na podstawie używanego rozszerzenia pliku:

  • plik lub .psm1 sprawia, że .ps1 typ modułu Script
  • plik sprawia, .psd1 że typ modułu Manifest
  • plik sprawia, że .dll typ modułu Binary
  • plik sprawia, że .cdxml typ modułu CIM
  • plik sprawia, że .xaml typ modułu Workflow

Domyślnie wszystkie elementy członkowskie modułu w module RootModule są eksportowane.

Napiwek

Szybkość ładowania modułu różni się między typami modułów binarnych, skryptów i modelu CIM . Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące tworzenia modułów programu PowerShell

Na przykład typ modułu tego modułu to Manifest. Jedynymi członkami modułu, które ten moduł może eksportować, są te zdefiniowane w modułach określonych za pomocą ustawienia NestedModules .

@{
    RootModule = ''
}

Uwaga

To ustawienie może być również określone w manifestach modułu jako ModuleToProcess. Chociaż ta nazwa tego ustawienia jest prawidłowa, najlepszym rozwiązaniem jest użycie modułu RootModule .

ModuleVersion

To ustawienie określa wersję modułu. Jeśli w systemie istnieje wiele wersji modułu, najnowsza wersja jest domyślnie ładowana po uruchomieniu polecenia Import-Module.

Wartość
Typ danych wejściowych System.String
Wymagane Tak
Wartość, jeśli nie jest zdenerwowana Brak
Akceptuje symbole wieloznaczne Nie.

Wartość tego ustawienia musi być konwertowana na System.Version wartość po uruchomieniu polecenia Import-Module.

Na przykład ten manifest deklaruje wersję modułu jako '1.2.3'.

@{
    ModuleVersion = '1.2.3'
}

Podczas importowania modułu i sprawdzania właściwości Version zwróć uwagę, że jest to obiekt System.Version , a nie ciąg:

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

Version

Zgodne wersjePSEdition

To ustawienie określa zgodne moduły PSEditions.

Wartość
Typ danych wejściowych System.String[]
Zaakceptowane wartości Desktop, Core
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Jeśli wartość tego ustawienia to $null, moduł można zaimportować niezależnie od psEdition sesji. Można ustawić ją na jedną lub więcej akceptowanych wartości.

Aby uzyskać informacje o programie PSEdition, zobacz:

Po zdefiniowaniu tego ustawienia moduł można zaimportować tylko do sesji, w której $PSEdition wartość zmiennej automatycznej jest uwzględniona w ustawieniu.

Uwaga

Ponieważ zmienna $PSEdition automatyczna została wprowadzona w wersji 5.1, starsze wersje programu Windows PowerShell nie mogą załadować modułu korzystającego z ustawienia CompatiblePSEditions .

Możesz na przykład zaimportować ten manifest modułu w dowolnej sesji:

@{
    # CompatiblePSEditions = @()
}

Po określeniu ustawienia ten moduł można zaimportować tylko w sesjach, w których $PSEdition wartość zmiennej automatycznej to Core.

@{
    CompatiblePSEditions = @('Core')
}

Identyfikator GUID

To ustawienie określa unikatowy identyfikator modułu. Identyfikator GUID służy do rozróżniania modułów o tej samej nazwie.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana 00000000-0000-0000-0000-000000000000
Akceptuje symbole wieloznaczne Nie.

Wartość tego ustawienia musi być konwertowana na System.Guid wartość po uruchomieniu polecenia Import-Module.

Uwaga

Chociaż nie jest to wymagane ustawienie, nie określa identyfikatora GUID w manifeście nie ma żadnych korzyści i może prowadzić do kolizji nazw modułów.

Możesz utworzyć nowy identyfikator GUID do użycia w manifeście:

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

Jeśli na maszynie znajduje się inny moduł o tej samej nazwie, nadal możesz zaimportować odpowiedni moduł, określając w pełni kwalifikowaną nazwę modułu:

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

Autor

To ustawienie identyfikuje autora modułu.

Wartość
Typ danych wejściowych System.String
Wymagane Galeria programu PowerShell
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Ten manifest deklaruje, że autorem modułu jest zespół ds. środowiska deweloperów firmy Contoso.

@{
    Author = 'Contoso Developer Experience Team'
}

CompanyName

To ustawienie identyfikuje firmę lub dostawcę, który utworzył moduł.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Ten manifest deklaruje, że moduł został utworzony przez firmę Contoso, Ltd.

@{
    CompanyName = 'Contoso, Ltd.'
}

To ustawienie określa oświadczenie o prawach autorskich dla modułu.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Ten manifest deklaruje oświadczenie o prawach autorskich, które zastrzega sobie wszystkie prawa do firmy Contoso, Ltd. od 2022 r.

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

opis

To ustawienie opisuje moduł na wysokim poziomie.

Wartość
Typ danych wejściowych System.String
Wymagane Galeria programu PowerShell
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Ten manifest zawiera krótki opis. Możesz również użyć ciągu tutaj, aby napisać dłuższy lub wielowierszowy opis.

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

PowerShellVersion

To ustawienie określa minimalną wersję programu PowerShell, która wymaga tego modułu.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Wartość tego ustawienia musi być konwertowana na System.Version wartość po uruchomieniu polecenia Import-Module.

Jeśli to ustawienie nie jest ustawione, program PowerShell nie ogranicza importu modułu na podstawie bieżącej wersji.

Na przykład ten manifest deklaruje, że moduł jest zgodny z każdą wersją programu PowerShell i programu Windows PowerShell.

@{
    # PowerShellVersion = ''
}

W programie PowerShellVersion ustawionym na 7.2wartość można zaimportować moduł tylko w programie PowerShell 7.2 lub nowszym.

@{
    PowerShellVersion = '7.2'
}

PowerShellHostName

To ustawienie określa nazwę programu hosta programu PowerShell, którego wymaga moduł, na przykład Host ISE programu Windows PowerShell lub ConsoleHost.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Nazwę hosta dla sesji można znaleźć za pomocą $Host.Name instrukcji . Na przykład można zobaczyć, że hostem sesji zdalnej jest ServerRemoteHost zamiast ConsoleHost:

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

Ten moduł można zaimportować do dowolnego hosta.

@{
    # PowerShellHostName = ''
}

W programie PowerShellHostName ustawionym na ServerRemoteHostwartość można zaimportować moduł tylko w zdalnej sesji programu PowerShell.

@{
    PowerShellHostName = 'ServerRemoteHost'
}

PowerShellHostVersion

To ustawienie określa minimalną wersję programu hosta programu PowerShell wymaganego przez moduł.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Wartość tego ustawienia musi być konwertowana na System.Version wartość po uruchomieniu polecenia Import-Module.

Uwaga

To ustawienie może być używane bez ustawienia PowerShellHostName , ale zwiększa szanse na nieoczekiwane zachowanie. Tego ustawienia należy używać tylko wtedy, gdy używasz również ustawienia PowerShellHostName .

Na przykład moduł tego manifestu można zaimportować z dowolnej sesji programu PowerShell uruchomionej w konsoliHost niezależnie od wersji hosta.

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

Po ustawieniu parametru PowerShellHostVersion na wartość można zaimportować moduł tylko z dowolnej sesji programu PowerShell uruchomionej w konsoliHost, gdzie host ma wersję 5.1 lub nowszą.5.1

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

DotNetFrameworkVersion

To ustawienie określa minimalną wersję programu Microsoft .NET Framework wymaganą przez moduł.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Uwaga

To ustawienie jest prawidłowe tylko dla wersji programu PowerShell Desktop, takiej jak Windows PowerShell 5.1, i dotyczy tylko wersji programu .NET Framework niższej niż 4.5. To wymaganie nie ma wpływu na nowsze wersje programu PowerShell lub programu .NET Framework.

Wartość tego ustawienia musi być konwertowana na System.Version wartość po uruchomieniu polecenia Import-Module.

Na przykład ten manifest deklaruje, że jego moduł można zaimportować w dowolnej sesji programu PowerShell lub programu Windows PowerShell, niezależnie od wersji programu Microsoft .NET Framework.

@{
    # DotNetFrameworkVersion = ''
}

W przypadku ustawienia DotNetFrameworkVersion na 4.0wartość można zaimportować ten moduł w dowolnej sesji programu Windows PowerShell, w której najnowsza dostępna wersja programu Microsoft .NET Framework wynosi co najmniej 4.0. Można go również zaimportować w dowolnej sesji programu PowerShell.

@{
    DotNetFrameworkVersion = '4.0'
}

CLRVersion

To ustawienie określa minimalną wersję środowiska uruchomieniowego języka wspólnego (CLR) programu Microsoft .NET Framework wymaganego przez moduł.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Uwaga

To ustawienie jest prawidłowe tylko dla wersji programu PowerShell Desktop, takiej jak Windows PowerShell 5.1, i dotyczy tylko wersji programu .NET Framework niższej niż 4.5. To wymaganie nie ma wpływu na nowsze wersje programu PowerShell lub programu .NET Framework.

Wartość tego ustawienia musi być konwertowana na System.Version wartość po uruchomieniu polecenia Import-Module.

Na przykład ten manifest deklaruje, że jego moduł można zaimportować w dowolnej sesji programu PowerShell lub programu Windows PowerShell, niezależnie od wersji środowiska CLR programu Microsoft .NET Framework.

@{
    # CLRVersion = ''
}

Po ustawieniu clRVersion na 4.0wartość można zaimportować ten moduł w dowolnej sesji programu Windows PowerShell, w której najnowsza dostępna wersja środowiska CLR wynosi co najmniej 4.0. Można go również zaimportować w dowolnej sesji programu PowerShell.

@{
    CLRVersion = '4.0'
}

Processorarchitecture

To ustawienie określa architekturę procesora wymaganą przez moduł.

Wartość
Typ danych wejściowych System.String
Zaakceptowane wartości None, , MSIL, X86, IA64, , Amd64Arm
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana None
Akceptuje symbole wieloznaczne Nie.

Wartość tego ustawienia musi być konwertowana na System.Reflection.ProcessorArchitecture wartość po uruchomieniu polecenia Import-Module.

Na przykład ten manifest deklaruje, że jego moduł można zaimportować w dowolnej sesji, niezależnie od architektury procesora systemu.

@{
    # ProcessorArchitecture = ''
}

W przypadku ustawienia ProcessorArchitecture na Amd64wartość można zaimportować ten moduł tylko w sesji uruchomionej na maszynie z zgodną architekturą.

@{
    ProcessorArchitecture = 'Amd64'
}

RequiredModules

To ustawienie określa moduły, które muszą znajdować się w stanie sesji globalnej. Jeśli wymagane moduły nie są w stanie sesji globalnej, program PowerShell je importuje. Jeśli wymagane moduły nie są dostępne, Import-Module polecenie zakończy się niepowodzeniem.

Wartość
Typ danych wejściowych System.String[], System.Collections.Hashtable[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Wpisy dla tego ustawienia mogą być nazwą modułu, pełną specyfikacją modułu lub ścieżką do pliku modułu.

Gdy wartość jest ścieżką, ścieżka może być w pełni kwalifikowana lub względna.

Gdy wartość jest nazwą lub specyfikacją modułu, program PowerShell przeszukuje element PSModulePath dla określonego modułu.

Specyfikacja modułu to tabela skrótów zawierająca następujące klucze.

  • ModuleName - Wymagany. Określa nazwę modułu.
  • GUID - Opcjonalne. Określa identyfikator GUID modułu.
  • Wymagane jest również określenie co najmniej jednego z trzech poniższych kluczy. Nie RequiredVersion można użyć klucza z kluczami ModuleVersion lub MaximumVersion . Akceptowalny zakres wersji dla modułu można zdefiniować, określając ModuleVersion razem klucze i MaximumVersion .
    • ModuleVersion - Określa minimalną akceptowalną wersję modułu.
    • RequiredVersion - Określa dokładną, wymaganą wersję modułu.
    • MaximumVersion - Określa maksymalną akceptowalną wersję modułu.

Uwaga

RequiredVersion Dodano element w programie Windows PowerShell 5.0. MaximumVersion Dodano element w programie Windows PowerShell 5.1.

Na przykład ten manifest deklaruje, że jego moduł nie wymaga żadnych innych modułów dla jego funkcji.

@{
    # RequiredModules = @()
}

Ten manifest deklaruje, że wymaga modułu PSReadLine. Po uruchomieniu Import-Module tego manifestu program PowerShell importuje najnowszą wersję programu PSReadLine, która jest dostępna dla sesji. Jeśli żadna wersja nie jest dostępna, importowanie zwraca błąd.

@{
    RequiredModules = @(
        'PSReadLine'
    )
}

Napiwek

W programie PowerShell 2.0 Import-Module nie importuje automatycznie wymaganych modułów. Sprawdza tylko, czy wymagane moduły znajdują się w stanie sesji globalnej.

Ten manifest deklaruje, że wymaga wersji modułu PSReadLine dostawcy we własnym folderze modułu. Po uruchomieniu Import-Module tego manifestu program PowerShell importuje dostawcę psReadLine z określonej ścieżki.

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

Ten manifest deklaruje, że w szczególności wymaga wersji 2.0.0 modułu PSReadLine. Po uruchomieniu Import-Module tego manifestu program PowerShell importuje wersję 2.0.0 programu PSReadLine, jeśli jest dostępna. Jeśli nie jest dostępna, Import-Module zwraca błąd.

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

Ten manifest deklaruje, że wymaga zaimportowania modułu PSReadLine w wersji 2.0.0 lub nowszej.

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

Ten manifest deklaruje, że wymaga zaimportowania modułu PSReadLine w wersji 2.0.0 lub starszej.

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

Ten manifest deklaruje, że wymaga zaimportowania modułu PSDesiredStateConfiguration w wersji równej lub wyższej niż 2.0.0, ale nie wyższej niż 2.99.99.

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

RequiredAssemblies

To ustawienie określa pliki zestawu (.dll), których wymaga moduł. Program PowerShell ładuje określone zestawy przed aktualizacją typów lub formatów, importowaniem zagnieżdżonych modułów lub importowaniem pliku modułu określonego w wartości klucza RootModule .

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Wpisy dla tego ustawienia mogą być nazwą pliku zestawu lub ścieżką do jednego. Wyświetl listę wszystkich wymaganych zestawów, nawet jeśli są one również wyświetlane jako moduły binarne w ustawieniu NestedModules .

Ten manifest wymaga example.dll zestawu. Przed załadowaniem plików formatowania lub typów określonych w tym manifeście program PowerShell ładuje example.dll się z Assemblies folderu znajdującego się w tym samym katalogu co manifest modułu.

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

ScriptsToProcess

To ustawienie określa pliki skryptu (.ps1), które są uruchamiane w stanie sesji wywołującego podczas importowania modułu. Tych skryptów można użyć do przygotowania środowiska, tak jak skrypt logowania.

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Aby określić skrypty uruchamiane w stanie sesji modułu, użyj klucza NestedModules .

Podczas importowania tego manifestu program PowerShell uruchamia element Initialize.ps1 w bieżącej sesji.

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

Jeśli na przykład Initialize.ps1 zapisuje komunikaty informacyjne i ustawia zmienną $ExampleState :

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

Podczas importowania modułu skrypt jest uruchamiany, zapisując te komunikaty i ustawienie $ExampleState w sesji.

$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

To ustawienie określa pliki typu (.ps1xml), które są uruchamiane po zaimportowaniu modułu.

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Podczas importowania modułu program PowerShell uruchamia Update-TypeData polecenie cmdlet z określonymi plikami. Ponieważ pliki typu nie są ograniczone, mają wpływ na wszystkie stany sesji w sesji.

Aby uzyskać więcej informacji na temat typów plików, zobacz about_Types.ps1xml

Na przykład podczas importowania tego manifestu program PowerShell ładuje typy określone w Example.ps1xml pliku z Types folderu znajdującego się w tym samym katalogu co manifest modułu.

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

FormatyToProcess

To ustawienie określa pliki formatowania (.ps1xml), które są uruchamiane podczas importowania modułu.

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Podczas importowania modułu program PowerShell uruchamia Update-FormatData polecenie cmdlet z określonymi plikami. Ponieważ pliki formatowania nie są ograniczone, mają wpływ na wszystkie stany sesji w sesji.

Aby uzyskać więcej informacji na temat typów plików, zobacz about_Format.ps1xml

Na przykład podczas importowania tego modułu program PowerShell ładuje formaty określone w Example.ps1xml pliku z Formats folderu znajdującego się w tym samym katalogu co manifest modułu.

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

Zagnieżdżonemoduły

To ustawienie określa moduły skryptu (.psm1) i moduły binarne (.dll), które są importowane do stanu sesji modułu. Można również określić pliki skryptów (.ps1). Pliki w tym ustawieniu są uruchamiane w kolejności, w której są wyświetlane.

Wartość
Typ danych wejściowych System.String[], System.Collections.Hashtable[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Wpisy dla tego ustawienia mogą być nazwą modułu, pełną specyfikacją modułu lub ścieżką do modułu lub pliku skryptu.

Gdy wartość jest ścieżką, ścieżka może być w pełni kwalifikowana lub względna.

Gdy wartość jest nazwą lub specyfikacją modułu, program PowerShell przeszukuje parametr PSModulePath dla określonego modułu.

Specyfikacja modułu to tabela skrótów zawierająca następujące klucze.

  • ModuleName - Wymagany. Określa nazwę modułu.
  • GUID - Opcjonalne. Określa identyfikator GUID modułu.
  • Wymagane jest również określenie co najmniej jednego z trzech poniższych kluczy. Nie RequiredVersion można użyć klucza z kluczami ModuleVersion lub MaximumVersion . Akceptowalny zakres wersji dla modułu można zdefiniować, określając ModuleVersion razem klucze i MaximumVersion .
    • ModuleVersion - Określa minimalną akceptowalną wersję modułu.
    • RequiredVersion - Określa dokładną, wymaganą wersję modułu.
    • MaximumVersion - Określa maksymalną akceptowalną wersję modułu.

Uwaga

RequiredVersion Dodano element w programie Windows PowerShell 5.0. MaximumVersion Dodano element w programie Windows PowerShell 5.1.

Wszystkie elementy, które należy wyeksportować z zagnieżdżonego modułu, muszą być eksportowane przez zagnieżdżony moduł przy użyciu Export-ModuleMember polecenia cmdlet lub być wymienione w jednej z właściwości eksportu:

  • FunctionsToExport
  • Polecenia cmdletToExport
  • ZmienneToExport
  • AliasyToExport

Moduły zagnieżdżone w stanie sesji modułu są dostępne dla modułu głównego, ale nie są zwracane przez Get-Module polecenie w stanie sesji wywołującego.

Skrypty (.ps1) wymienione w tym ustawieniu są uruchamiane w stanie sesji modułu, a nie w stanie sesji wywołującego. Aby uruchomić skrypt w stanie sesji wywołującego, wyświetl nazwę pliku skryptu w ustawieniu ScriptsToProcess .

Na przykład podczas importowania tego manifestu Helpers.psm1 moduł zostanie załadowany do stanu sesji modułu głównego. Wszystkie polecenia cmdlet zadeklarowane w zagnieżdżonym module są eksportowane, chyba że zostaną one ograniczone w inny sposób.

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

FunctionsToExport

To ustawienie określa funkcje eksportowane przez moduł. To ustawienie umożliwia ograniczenie funkcji eksportowanych przez moduł. Może usuwać funkcje z listy wyeksportowanych funkcji, ale nie może dodawać funkcji do listy.

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Tak

W tym ustawieniu można określić wpisy z symbolami wieloznacznymi. Wszystkie pasujące funkcje na liście wyeksportowanych funkcji są eksportowane.

Napiwek

Aby uzyskać wydajność i możliwość odnajdywania, zawsze należy jawnie wyświetlić listę funkcji, które mają być eksportowane w tym ustawieniu bez używania symboli wieloznacznych.

Na przykład podczas importowania modułu z komentarzem ustawienia wszystkie funkcje w module głównym i wszystkie zagnieżdżone moduły są eksportowane.

@{
    # FunctionsToExport = @()
}

Ten manifest jest funkcjonalnie identyczny, aby nie określać ustawienia w ogóle.

@{
    FunctionsToExport = '*'
}

W przypadku ustawiania funkcjiToExport jako pustej tablicy podczas importowania tego modułu nie są dostępne żadne funkcje modułu głównego ani eksportowanie zagnieżdżonych modułów.

@{
    FunctionsToExport = @()
}

Uwaga

Jeśli utworzysz manifest modułu za pomocą polecenia i nie określisz parametru New-ModuleManifestFunctionsToExport , utworzony manifest ma to ustawienie określone jako pusta tablica. Jeśli nie edytujesz manifestu, żadne funkcje z modułu nie zostaną wyeksportowane.

Gdy funkcja FunctionsToExport jest ustawiona tak, aby zawierała Get-Example tylko funkcję, podczas importowania tego modułu jest udostępniana tylko Get-Example funkcja, nawet jeśli inne funkcje zostały wyeksportowane przez moduł główny lub wszystkie zagnieżdżone moduły.

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

W przypadku zestawu FunctionsToExport z ciągiem wieloznacznymi podczas importowania tej funkcji dowolna funkcja, której nazwa kończy się Example na, jest udostępniana, nawet jeśli inne funkcje zostały wyeksportowane jako elementy członkowskie modułu głównego lub dowolnych zagnieżdżonych modułów.

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

Polecenia cmdletToExport

To ustawienie określa polecenia cmdlet eksportowane przez moduł. To ustawienie umożliwia ograniczenie poleceń cmdlet wyeksportowanych przez moduł. Może usuwać polecenia cmdlet z listy wyeksportowanych elementów członkowskich modułu, ale nie może dodawać poleceń cmdlet do listy.

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Tak

W tym ustawieniu można określić wpisy z symbolami wieloznacznymi. Wszystkie pasujące polecenia cmdlet na liście wyeksportowanych poleceń cmdlet są eksportowane.

Napiwek

Aby uzyskać wydajność i możliwość odnajdywania, zawsze należy jawnie wyświetlić listę poleceń cmdlet, które mają być eksportowane przez moduł w tym ustawieniu bez używania symboli wieloznacznych.

Na przykład podczas importowania modułu z tym ustawieniem oznaczono jako komentarz, wszystkie polecenia cmdlet w module głównym i wszystkie zagnieżdżone moduły są eksportowane.

@{
    # CmdletsToExport = @()
}

Ten manifest jest funkcjonalnie identyczny, aby nie określać ustawienia w ogóle.

@{
    CmdletsToExport = '*'
}

W przypadku polecenia CmdletsToExport ustawionego jako pusta tablica podczas importowania tego modułu żadne polecenia cmdlet nie są dostępne dla modułu głównego ani eksportowania żadnych zagnieżdżonych modułów.

@{
    CmdletsToExport = @()
}

Uwaga

Jeśli utworzysz manifest modułu za pomocą polecenia i nie określisz parametru New-ModuleManifestCmdletsToExport , utworzony manifest ma to ustawienie określone jako pusta tablica. O ile manifest nie zostanie edytowany, żadne polecenia cmdlet z modułu nie zostaną wyeksportowane.

Za pomocą polecenia CmdletsToExport ustawionego Get-Example na dołączenie polecenia cmdlet tylko podczas importowania tego modułu Get-Example tylko polecenie cmdlet jest udostępniane, nawet jeśli inne polecenia cmdlet zostały wyeksportowane przez moduł główny lub wszystkie zagnieżdżone moduły.

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

Za pomocą polecenia CmdletsToExport ustawionego za pomocą ciągu wieloznakowego podczas importowania tego modułu wszystkie polecenia cmdlet, których nazwa kończy się Example na, jest dostępna, nawet jeśli inne polecenia cmdlet zostały wyeksportowane jako elementy członkowskie modułu głównego lub dowolnych zagnieżdżonych modułów.

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

ZmienneToExport

To ustawienie określa zmienne eksportowane przez moduł. To ustawienie umożliwia ograniczenie zmiennych eksportowanych przez moduł. Może usuwać zmienne z listy wyeksportowanych elementów członkowskich modułu, ale nie może dodawać zmiennych do listy.

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Tak

W tym ustawieniu można określić wpisy z symbolami wieloznacznymi. Wszystkie pasujące zmienne na liście wyeksportowanych elementów członkowskich modułu są eksportowane.

Napiwek

Aby uzyskać wydajność i możliwość odnajdywania, zawsze należy jawnie wyświetlić listę zmiennych, które mają być eksportowane w tym ustawieniu bez używania symboli wieloznacznych.

Na przykład podczas importowania modułu z tym ustawieniem oznaczono jako komentarz, wszystkie zmienne w module głównym i wszystkie zagnieżdżone moduły są eksportowane.

@{
    # VariablesToExport = @()
}

Ten manifest jest funkcjonalnie identyczny, aby nie określać ustawienia w ogóle.

@{
    VariablesToExport = '*'
}

Uwaga

Jeśli utworzysz manifest modułu za pomocą polecenia i nie określisz parametru New-ModuleManifestVariablesToExport , utworzony manifest ma to ustawienie określone jako '*'. Jeśli nie edytujesz manifestu, wszystkie zmienne z modułu zostaną wyeksportowane.

W przypadku ustawienia VariablesToExport jako pustej tablicy podczas importowania tego modułu nie są dostępne żadne zmienne modułu głównego ani żaden eksport zagnieżdżonych modułów.

@{
    VariablesToExport = @()
}

W przypadku ustawienia ZmienneToExport tak, aby zawierała tylko zmienną SomeExample , podczas importowania tego modułu jest udostępniana tylko $SomeExample zmienna, nawet jeśli inne zmienne zostały wyeksportowane przez moduł główny lub dowolne zagnieżdżone moduły.

@{
    VariablesToExport = @(
        'SomeExample'
    )
}

W przypadku zestawu VariablesToExport z ciągiem wieloznacznymi podczas importowania tej zmiennej, której nazwa kończy się Example na, jest udostępniana, nawet jeśli inne zmienne zostały wyeksportowane jako elementy członkowskie modułu głównego lub dowolnych zagnieżdżonych modułów.

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

DscResourcesToExport

To ustawienie określa zasoby DSC eksportowane przez moduł. To ustawienie umożliwia ograniczenie zasobów DSC opartych na klasach, które są eksportowane przez moduł . Może usunąć zasoby DSC z listy wyeksportowanych elementów członkowskich modułu, ale nie może dodać zasobów DSC do listy.

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Tak

W tym ustawieniu można określić wpisy z symbolami wieloznacznymi. Wszystkie pasujące zasoby DSC oparte na klasie w module są eksportowane.

Napiwek

Aby można było odnajdywać, zawsze należy jawnie wyświetlić listę wszystkich zasobów DSC eksportowanych przez moduł.

Aby uzyskać więcej informacji na temat tworzenia i używania zasobów DSC, zobacz dokumentację dsc.

Ten manifest eksportuje wszystkie zasoby DSC oparte na klasach i moF zdefiniowane w module głównym i wszystkie zagnieżdżone moduły.

@{
    # DscResourcesToExport = @()
}

Ten manifest eksportuje wszystkie zasoby DSC oparte na moF zdefiniowane w module głównym i wszystkie zagnieżdżone moduły, ale tylko jeden zagnieżdżony zasób DSC oparty na klasie, ExampleClassResource.

@{
    DscResourcesToExport = @(
        'ExampleClassResource'
    )
}

Ten manifest eksportuje wszystkie zasoby DSC, które zawiera. Nawet jeśli zasób MOF nie został wymieniony, moduł nadal go eksportuje.

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

Lista modułów

To ustawienie jest informacyjną listą spisu modułów uwzględnionych w tym ustawieniu. Ta lista nie ma wpływu na zachowanie modułu.

Wartość
Typ danych wejściowych System.String[], System.Collections.Hashtable[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Wpisy dla tego ustawienia mogą być nazwą modułu, pełną specyfikacją modułu lub ścieżką do modułu lub pliku skryptu.

Gdy wartość jest ścieżką, ścieżka może być w pełni kwalifikowana lub względna.

Gdy wartość jest nazwą lub specyfikacją modułu, program PowerShell przeszukuje parametr PSModulePath dla określonego modułu.

Specyfikacja modułu to tabela skrótów zawierająca następujące klucze.

  • ModuleName - Wymagany. Określa nazwę modułu.
  • GUID - Opcjonalne. Określa identyfikator GUID modułu.
  • Wymagane jest również określenie co najmniej jednego z trzech poniższych kluczy. Nie RequiredVersion można użyć klucza z kluczami ModuleVersion lub MaximumVersion . Akceptowalny zakres wersji dla modułu można zdefiniować, określając ModuleVersion razem klucze i MaximumVersion .
    • ModuleVersion - Określa minimalną akceptowalną wersję modułu.
    • RequiredVersion - Określa dokładną, wymaganą wersję modułu.
    • MaximumVersion - Określa maksymalną akceptowalną wersję modułu.

Uwaga

RequiredVersion Dodano element w programie Windows PowerShell 5.0. MaximumVersion Dodano element w programie Windows PowerShell 5.1.

Ten manifest nie udostępnia informacyjnej listy modułów, które zawiera. Może to być lub nie zawiera modułów. Mimo że to ustawienie nie jest określone, żadne moduły wymienione w module RootModule, ScriptsToProcess lub NestedModules ustawienia nadal zachowują się normalnie.

@{
    # ModuleList = @()
}

Ten manifest deklaruje, że jedynymi modułami, które zawiera, są Example.psm1 moduły podrzędne First.psm1 i Second.psm1 w folderze Submodules .

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

Filelist

To ustawienie jest informacyjną listą spisu plików zawartych w tym module. Ta lista nie ma wpływu na zachowanie modułu.

Wartość
Typ danych wejściowych System.String[]
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Tak

Wpisy dla tego ustawienia powinny być ścieżką względną do pliku z folderu zawierającego manifest modułu.

Gdy użytkownik wywołuje Get-Module manifest ze zdefiniowanym tym ustawieniem, właściwość FileList zawiera pełną ścieżkę do tych plików, łącząc ścieżkę modułu ze ścieżką względną każdego wpisu.

Ten manifest nie zawiera listy jego plików.

@{
    # FileList = @()
}

Ten manifest deklaruje, że jedyne pliki, które zawiera, są wymienione w tym ustawieniu.

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

PrivateData

To ustawienie definiuje tabelę skrótów danych, która jest dostępna dla dowolnych poleceń lub funkcji w zakresie modułu głównego.

Wartość
Typ danych wejściowych System.Collections.Hashtable
Wymagane Galeria programu PowerShell, Crescendo
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Podczas eksportowania manifestu Crescendo w celu utworzenia nowego modułu Export-CrescendoModule dodaje dwa klucze do usługi PrivateData

  • CrescendoGenerated — sygnatura czasowa wyeksportowania modułu
  • CrescendoVersion — wersja crescendo używana do eksportowania modułu

Możesz dodać własne klucze do przechowywania metadanych, które chcesz śledzić. Wszystkie klucze dodane do tego ustawienia są dostępne dla funkcji i poleceń cmdlet w module głównym przy użyciu polecenia $MyInvocation.MyCommand.Module.PrivateData. Tabela skrótów nie jest dostępna w samym zakresie modułu, tylko w poleceniach cmdlet zdefiniowanych w module.

Na przykład ten manifest definiuje klucz PublishedDate w funkcji PrivateData.

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

Polecenia cmdlet w module mogą uzyskiwać dostęp do tej wartości za pomocą zmiennej $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"
    }
}

Po zaimportowaniu modułu funkcja używa wartości PrivateData do określenia, kiedy moduł został opublikowany.

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

Właściwość podrzędna PSData definiuje tabelę skrótów wartości, które obsługują określone scenariusze rozszerzeń.

Wartość
Typ danych wejściowych System.Collections.Hashtable
Wymagane Galeria programu PowerShell, funkcje eksperymentalne, moduły Crescendo
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Właściwość podrzędna PSData jest używana w następujących scenariuszach:

  • Galeria programu PowerShell — podczas tworzenia manifestu modułu przy użyciu New-ModuleManifest polecenia cmdlet wstępnie wypełnia tabelę skrótów PSData z kluczami zastępczymi wymaganymi podczas publikowania modułu w Galeria programu PowerShell. Aby uzyskać więcej informacji na temat manifestów modułów i publikowania w Galeria programu PowerShell, zobacz Package manifest values that impact the Galeria programu PowerShell UI (Wartości manifestu pakietu wpływające na interfejs użytkownika Galeria programu PowerShell).
  • Funkcje eksperymentalne — metadane dotyczące funkcji eksperymentalnej są przechowywane we właściwości ExperimentalFeatures psData. Właściwość ExperimentalFeatures to tablica tabel skrótów zawierająca nazwę i opis funkcji. Aby uzyskać więcej informacji, zobacz Deklarowanie funkcji eksperymentalnych w modułach.
  • Moduły Crescendo — podczas eksportowania manifestu Crescendo w celu utworzenia nowego modułu Export-CrescendoModuledodaje wartość CrescendoBuilt do właściwości PSData.Tags. Ten tag służy do znajdowania modułów w Galeria programu PowerShell utworzonych przy użyciu narzędzia Crescendo. Aby uzyskać więcej informacji, zobacz Export-CrescendoModule.

Identyfikator HELPInfoURI

To ustawienie określa adres internetowy pliku XML HelpInfo dla modułu.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Wartość tego ustawienia musi być identyfikatorem URI rozpoczynającym się od protokołu HTTP lub https.

Plik XML HelpInfo obsługuje funkcję Updatable Help, która została wprowadzona w programie PowerShell 3.0. Zawiera on informacje o lokalizacji plików pomocy do pobrania dla modułu oraz numery wersji najnowszych plików pomocy dla każdego obsługiwanego ustawień regionalnych.

Aby uzyskać informacje o aktualizowalnej pomocy, zobacz about_Updatable_Help. Aby uzyskać informacje o pliku XML HelpInfo, zobacz Obsługa aktualizowalnej pomocy.

Na przykład ten moduł obsługuje pomoc z możliwością aktualizacji.

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

DefaultCommandPrefix

To ustawienie określa prefiks, który jest poprzedzony do ununs wszystkich poleceń w module podczas ich importowania do sesji. Prefiksy pomagają zapobiegać konfliktom nazw poleceń w sesji użytkownika.

Wartość
Typ danych wejściowych System.String
Wymagane Nie.
Wartość, jeśli nie jest zdenerwowana $null
Akceptuje symbole wieloznaczne Nie.

Użytkownicy modułu mogą zastąpić ten prefiks, określając parametr Prefiks polecenia Import-Module cmdlet.

To ustawienie zostało wprowadzone w programie PowerShell 3.0.

Po zaimportowaniu tego manifestu wszystkie polecenia cmdlet zaimportowane z tego modułu zostały Example wstępnie utworzone do nounu w nazwie. Na przykład Get-Item jest importowany jako Get-ExampleItem.

@{
    DefaultCommandPrefix = 'Example'
}

Zobacz też