Поделиться через


about_Module_Manifests

Краткое описание

Описывает параметры и рекомендации по написанию файлов манифеста модуля.

Длинное описание

Манифест модуля — это файл данных PowerShell (.psd1), содержащий хэш-таблицу. Пары "ключ-значение" в хэш-таблице описывают содержимое и атрибуты модуля, определяют предварительные требования и управляют процессом обработки компонентов.

Манифесты не требуются для загрузки модуля, но они необходимы для публикации модуля в .PowerShell Gallery Манифесты также позволяют отделять реализацию модуля от того, как она загружается. С помощью манифеста можно определить требования, совместимость, порядок загрузки и многое другое.

При использовании New-ModuleManifest без указания параметров манифеста он записывает минимальный файл манифеста. В приведенном ниже фрагменте показано, как вы ознакомитесь с выходными данными по умолчанию, фрагментами комментариев и интервалами для краткости:

@{
# 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 = ''
        # ExternalModuleDependencies = @()
    } # End of PSData hashtable
} # End of PrivateData hashtable
# HelpInfoURI = ''
# DefaultCommandPrefix = ''
}

Перед публикацией модуля можно использовать Test-ModuleManifest для проверки манифеста модуля. Test-ModuleManifest возвращает ошибку, если манифест недопустим или модуль не может быть импортирован в текущий сеанс, так как сеанс не соответствует требованиям, заданным в манифесте.

Использование кода скрипта в манифесте модуля

Значения, назначенные параметрам в файле манифеста, могут быть выражениями, которые оцениваются PowerShell. Это позволяет создавать пути и условно назначать значения на основе переменных.

При импорте модуля с помощью Import-Moduleманифест оценивается в Restricted языковом режиме. Restricted режим ограничивает команды и переменные, которые можно использовать.

Разрешенные команды

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

Допустимые переменные

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Любые переменные среды, такие как $Env:TEMP

Дополнительные сведения см. в about_Language_Modes.

Параметры манифеста

В следующих разделах подробно описаны все доступные параметры в манифесте модуля и их использование. Они начинаются с синоптиса параметра и следуют матрице, которая перечисляет:

  • тип ввода: тип объекта, который можно указать для этого параметра в манифесте.
  • Обязательный: если это значение равно "Да", параметр требуется как для импорта модуля, так и для публикации его в .PowerShell Gallery Если это "Нет", это не требуется. Если это PowerShell Galleryтак, это необходимо только для публикации в .PowerShell Gallery
  • значение, если не задано: значение этого параметра при импорте и явном задании.
  • принимает подстановочные знаки: может ли этот параметр принимать подстановочное значение или нет.

RootModule

Этот параметр задает основной или корневой файл модуля. При импорте модуля члены, экспортированные корневым файлом модуля, импортируются в состояние сеанса вызывающего объекта.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Значение должно быть путем к одному из следующих значений:

  • скрипт (.ps1)
  • модуль скрипта (.psm1)
  • манифест модуля (.psd1)
  • сборка (.dll)
  • XML-файл определения командлета (.cdxml)
  • a Windows PowerShell 5.1 Workflow (.xaml)

Путь должен быть относительно манифеста модуля.

Если манифест модуля не имеет корневого файла в ключе RootModule, манифест становится основным файлом для модуля, а модуль становится модулем манифеста (ModuleType = Manifest). При определении RootModule тип модуля определяется из используемого расширения файла:

  • файл .ps1 или .psm1 делает тип модуля Script
  • файл .psd1 делает тип модуля манифестом
  • файл .dll делает тип модуля binary
  • файл .cdxml делает тип модуля CIM
  • файл .xaml делает тип модуля workflow

По умолчанию экспортируются все члены модуля в RootModule.

Кончик

Скорость загрузки модуля отличается между двоичными, скриптамии типами модулей CIM CIM. Дополнительные сведения см. в рекомендации по разработке модуля PowerShell

Например, этот модуль ModuleType является манифеста. Единственными элементами модуля, которые этот модуль может экспортировать, являются те, которые определены в модулях, указанных в параметре NestedModules.

@{
    RootModule = ''
}

Заметка

Этот параметр также можно указать в манифестах модуля как ModuleToProcess. Хотя это имя для этого параметра является допустимым, рекомендуется использовать вместо этого RootModule.

ModuleVersion

Этот параметр задает версию модуля. Если в системе существует несколько версий модуля, последняя версия загружается по умолчанию при запуске Import-Module.

Ценность
тип ввода System.String
обязательный Да
значение , если не задано Никакой
Принимает подстановочные знаки Нет

Значение этого параметра должно быть преобразовано в System.Version при запуске Import-Module.

Например, этот манифест объявляет версию модуля как '1.2.3'.

@{
    ModuleVersion = '1.2.3'
}

При импорте модуля и проверке свойства версии обратите внимание, что это объект System.Version, а не строка:

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

Version

СовместимостьPSEditions

Этот параметр задает совместимые PSEditions модуля.

Ценность
тип ввода System.String[]
принятые значения Desktop, Core
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Если значение этого параметра $null, модуль можно импортировать независимо от PSEdition сеанса. Его можно задать для одного или нескольких принятых значений.

Дополнительные сведения о PSEdition см. в следующем разделе:

Если этот параметр определен, модуль можно импортировать только в сеанс, где значение $PSEdition автоматической переменной включено в параметр.

Заметка

Так как $PSEdition автоматическая переменная появилась в версии 5.1, старые версии Windows PowerShell не могут загрузить модуль, использующий параметр CompatiblePSEditions.

Например, этот манифест модуля можно импортировать в любой сеанс:

@{
    # CompatiblePSEditions = @()
}

С указанным параметром этот модуль можно импортировать только в сеансах, где значение $PSEdition автоматической переменной Core.

@{
    CompatiblePSEditions = @('Core')
}

GUID

Этот параметр задает уникальный идентификатор модуля. GUID используется для различения модулей с одинаковым именем.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано 00000000-0000-0000-0000-000000000000
Принимает подстановочные знаки Нет

Значение этого параметра должно быть преобразовано в System.Guid при запуске Import-Module.

Осторожность

Хотя это не обязательный параметр, не указывая GUID в манифесте нет преимуществ и может привести к столкновениям имен для модулей.

Вы можете создать новый guid для использования в манифесте:

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

Если на компьютере есть другой модуль с тем же именем, вы по-прежнему можете импортировать нужный модуль, указав полное имя модуля:

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

Author

Этот параметр определяет автора модуля.

Ценность
тип ввода System.String
обязательный PowerShell Gallery
значение , если не задано $null
Принимает подстановочные знаки Нет

Этот манифест объявляет, что автор модуля является командой разработчиков Contoso.

@{
    Author = 'Contoso Developer Experience Team'
}

CompanyName

Этот параметр определяет компанию или поставщика, создавшего модуль.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Этот манифест объявляет, что модуль был создан Contoso, Ltd.

@{
    CompanyName = 'Contoso, Ltd.'
}

Этот параметр задает заявление об авторских правах для модуля.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Этот манифест объявляет заявление об авторских правах, резервируя все права компании Contoso, Ltd. по состоянию на 2022 год.

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

Description

Этот параметр описывает модуль на высоком уровне.

Ценность
тип ввода System.String
обязательный PowerShell Gallery
значение , если не задано $null
Принимает подстановочные знаки Нет

Этот манифест содержит краткое описание. Вы также можете использовать строку здесь для записи более длинного или многострочный описания.

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

PowerShellVersion

Этот параметр задает минимальную версию PowerShell, требуемую для этого модуля.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Значение этого параметра должно быть преобразовано в System.Version при запуске Import-Module.

Если этот параметр не задан, PowerShell не ограничивает импорт модуля на основе текущей версии.

Например, этот манифест объявляет, что модуль совместим с каждой версией PowerShell и Windows PowerShell.

@{
    # PowerShellVersion = ''
}

Если PowerShellVersion задано значение 7.2, модуль можно импортировать только в PowerShell 7.2 или более поздней версии.

@{
    PowerShellVersion = '7.2'
}

PowerShellHostName

Этот параметр указывает имя конечной программы PowerShell, которую требует модуль, например узле интегрированной среды сценариев Windows PowerShell или ConsoleHost.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Имя узла для сеанса можно найти с помощью инструкции $Host.Name. Например, можно увидеть, что узел удаленного сеанса ServerRemoteHost вместо ConsoleHost:

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

Этот модуль можно импортировать в любой узел.

@{
    # PowerShellHostName = ''
}

Если PowerShellHostName задано значение ServerRemoteHost, модуль можно импортировать только в удаленном сеансе PowerShell.

@{
    PowerShellHostName = 'ServerRemoteHost'
}

PowerShellHostVersion

Этот параметр задает минимальную версию конечной программы PowerShell, которую требует модуль.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Значение этого параметра должно быть преобразовано в System.Version при запуске Import-Module.

Осторожность

Хотя этот параметр можно использовать без параметра PowerShellHostName, он повышает вероятность непредвиденного поведения. Используйте этот параметр только при использовании параметра PowerShellHostName.

Например, модуль этого манифеста можно импортировать из любого сеанса PowerShell, работающего в ConsoleHostнезависимо от версии узла.

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

Если PowerShellHostVersion задано значение 5.1, модуль можно импортировать только из любого сеанса PowerShell, работающего в ConsoleHost, где версия узла — 5.1 или выше.

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

DotNetFrameworkVersion

Этот параметр задает минимальную версию Microsoft .NET Framework, которую требует модуль.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Заметка

Этот параметр действителен только для выпуска PowerShell Desktop, например Windows PowerShell 5.1, и применяется только к версиям .NET Framework ниже 4.5. Это требование не влияет на более новые версии PowerShell или .NET Framework.

Значение этого параметра должно быть преобразовано в System.Version при запуске Import-Module.

Например, этот манифест объявляет, что его модуль можно импортировать в любой сеанс PowerShell или Windows PowerShell независимо от версии Microsoft .NET Framework.

@{
    # DotNetFrameworkVersion = ''
}

Если DotNetFrameworkVersion задано значение 4.0, этот модуль можно импортировать в любом сеансе Windows PowerShell, где последняя доступная версия Microsoft .NET Framework не менее 4.0. Вы также можете импортировать его в любой сеанс PowerShell.

@{
    DotNetFrameworkVersion = '4.0'
}

CLRVersion

Этот параметр задает минимальную версию среды CLR microsoft .NET Framework, которую требует модуль.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Заметка

Этот параметр действителен только для выпуска PowerShell Desktop, например Windows PowerShell 5.1, и применяется только к версиям .NET Framework ниже 4.5. Это требование не влияет на более новые версии PowerShell или .NET Framework.

Значение этого параметра должно быть преобразовано в System.Version при запуске Import-Module.

Например, этот манифест объявляет, что его модуль можно импортировать в любой сеанс PowerShell или Windows PowerShell независимо от версии среды CLR Microsoft .NET Framework.

@{
    # CLRVersion = ''
}

При clRVersion задано значение 4.0, этот модуль можно импортировать в любом сеансе Windows PowerShell, где последняя доступная версия среды CLR составляет не менее 4.0. Вы также можете импортировать его в любой сеанс PowerShell.

@{
    CLRVersion = '4.0'
}

ProcessorArchitecture

Этот параметр задает архитектуру процессора, требуемую модулем.

Ценность
тип ввода System.String
принятые значения None MSIL X86 IA64 Amd64 Arm
обязательный Нет
значение , если не задано None
Принимает подстановочные знаки Нет

Значение этого параметра должно быть преобразовано в System.Reflection.ProcessorArchitecture при запуске Import-Module.

Например, этот манифест объявляет, что его модуль можно импортировать в любой сеанс независимо от архитектуры процессора системы.

@{
    # ProcessorArchitecture = ''
}

Если ProcessorArchitecture задано значение Amd64, этот модуль можно импортировать только в сеансе, работающем на компьютере с соответствующей архитектурой.

@{
    ProcessorArchitecture = 'Amd64'
}

RequiredModules

Этот параметр задает модули, которые должны находиться в состоянии глобального сеанса. Если необходимые модули не в состоянии глобального сеанса, PowerShell импортирует их. Если необходимые модули недоступны, команда Import-Module завершается ошибкой.

Ценность
тип ввода System.String[], System.Collections.Hashtable[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Записи для этого параметра могут быть именем модуля, полной спецификацией модуля или путем к файлу модуля.

Если значение является путем, путь может быть полностью или относительным.

Если значение является спецификацией имени или модуля, PowerShell выполняет поиск PSModulePath для указанного модуля.

Спецификация модуля — это хэш-таблица со следующими ключами.

  • ModuleName - Обязательный. Указывает имя модуля.
  • GUID - необязательный. Указывает GUID модуля.
  • Это также Обязательный, чтобы указать хотя бы один из трех приведенных ниже ключей. Ключ RequiredVersion нельзя использовать с ключами ModuleVersion или MaximumVersion. Можно определить допустимый диапазон версий для модуля, указав ModuleVersion и MaximumVersion ключи вместе.
    • ModuleVersion. Указывает минимальную допустимую версию модуля.
    • RequiredVersion . Указывает точную, требуемую версию модуля.
    • MaximumVersion. Указывает максимальную допустимую версию модуля.

Заметка

RequiredVersion добавлен в Windows PowerShell 5.0. MaximumVersion добавлен в Windows PowerShell 5.1.

Например, этот манифест объявляет, что его модуль не требует каких-либо других модулей для его функциональных возможностей.

@{
    # RequiredModules = @()
}

Этот манифест объявляет, что для него требуется модуль PSReadLine. При запуске Import-Module в этом манифесте PowerShell импортирует последнюю версию PSReadLine, доступную для сеанса. Если версия недоступна, импорт возвращает ошибку.

@{
    RequiredModules = @(
        'PSReadLine'
    )
}

Кончик

В PowerShell 2.0 Import-Module не импортирует необходимые модули автоматически. Он проверяет, находятся ли необходимые модули только в состоянии глобального сеанса.

Этот манифест объявляет, что для него требуется версия модуля PSReadLine, поставщика в собственной папке модуля. При запуске Import-Module в этом манифесте PowerShell импортирует поставщик PSReadLine из указанного пути.

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

Этот манифест объявляет, что для него требуется версия 2.0.0 модуля PSReadLine. При запуске Import-Module в этом манифесте PowerShell импортирует версию 2.0.0 PSReadLine, если она доступна. Если он недоступен, Import-Module возвращает ошибку.

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

Этот манифест объявляет, что он требует, чтобы модуль PSReadLine был импортирован в версии 2.0.0 или выше.

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

Этот манифест объявляет, что он требует, чтобы модуль PSReadLine был импортирован в версии 2.0.0 или ниже.

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

Этот манифест объявляет, что он требует, чтобы модуль PSDesiredStateConfiguration импортировался в версии, равной или выше 2.0.0, но не выше 2.99.99.

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

RequiredAssemblies

Этот параметр задает файлы сборки (.dll), необходимые модулю. PowerShell загружает указанные сборки перед обновлением типов или форматов, импорта вложенных модулей или импорта файла модуля, указанного в значении ключа RootModule.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Записи для этого параметра могут быть именем файла сборки или пути к одному. Перечислить все необходимые сборки, даже если они также перечислены в виде двоичных модулей в параметре NestedModules.

Для этого манифеста требуется сборка example.dll. Перед загрузкой файлов форматирования или типов, указанных в этом манифесте, PowerShell загружает example.dll из папки Assemblies, расположенной в том же каталоге, что и манифест модуля.

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

ScriptsToProcess

Этот параметр задает файлы скрипта (.ps1), которые выполняются в состоянии сеанса вызывающего объекта при импорте модуля. Эти сценарии можно использовать для подготовки среды так же, как и скрипт входа.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Чтобы указать скрипты, которые выполняются в состоянии сеанса модуля, используйте ключ NestedModules.

При импорте этого манифеста PowerShell запускает Initialize.ps1 в текущем сеансе.

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

Например, если Initialize.ps1 записывает информационные сообщения и задает переменную $ExampleState:

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

При импорте модуля скрипт запускается, записывает эти сообщения и задает $ExampleState в сеансе.

$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

Этот параметр задает файлы типов (.ps1xml), которые выполняются при импорте модуля.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

При импорте модуля PowerShell запускает командлет Update-TypeData с указанными файлами. Так как файлы типов не ограничены, они влияют на все состояния сеанса в сеансе.

Дополнительные сведения о файлах типов см. в разделе about_Types.ps1xml

Например, при импорте этого манифеста PowerShell загружает типы, указанные в файле Example.ps1xml из папки Types, расположенной в том же каталоге, что и манифест модуля.

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

ФорматыToProcess

Этот параметр задает файлы форматирования (.ps1xml), которые выполняются при импорте модуля.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

При импорте модуля PowerShell запускает командлет Update-FormatData с указанными файлами. Так как файлы форматирования не ограничены, они влияют на все состояния сеанса в сеансе.

Дополнительные сведения о файлах типов см. в разделе about_Format.ps1xml

Например, при импорте этого модуля PowerShell загружает форматы, указанные в файле Example.ps1xml из папки Formats, расположенной в том же каталоге, что и манифест модуля.

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

Вложенныеmodules

Этот параметр задает модули скриптов (.psm1) и двоичные модули (.dll), импортируемые в состояние сеанса модуля. Вы также можете указать файлы скриптов (.ps1). Файлы в этом параметре выполняются в том порядке, в котором они перечислены.

Ценность
тип ввода System.String[], System.Collections.Hashtable[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Записи для этого параметра могут быть именем модуля, полной спецификацией модуля или путем к файлу модуля или скрипта.

Если значение является путем, путь может быть полностью или относительным.

Если значение является именем модуля или спецификацией, PowerShell выполняет поиск PSModulePath для указанного модуля.

Спецификация модуля — это хэш-таблица со следующими ключами.

  • ModuleName - Обязательный. Указывает имя модуля.
  • GUID - необязательный. Указывает GUID модуля.
  • Это также Обязательный, чтобы указать хотя бы один из трех приведенных ниже ключей. Ключ RequiredVersion нельзя использовать с ключами ModuleVersion или MaximumVersion. Можно определить допустимый диапазон версий для модуля, указав ModuleVersion и MaximumVersion ключи вместе.
    • ModuleVersion. Указывает минимальную допустимую версию модуля.
    • RequiredVersion . Указывает точную, требуемую версию модуля.
    • MaximumVersion. Указывает максимальную допустимую версию модуля.

Заметка

RequiredVersion добавлен в Windows PowerShell 5.0. MaximumVersion добавлен в Windows PowerShell 5.1.

Все элементы, которые необходимо экспортировать из вложенного модуля, должны быть экспортированы вложенным модулем с помощью командлета Export-ModuleMember или перечислены в одном из свойств экспорта:

  • FunctionsToExport
  • командлеты ToExport
  • ПеременныеToExport
  • AliasesToExport

Вложенные модули в состоянии сеанса модуля доступны корневому модулю, но они не возвращаются командой Get-Module в состоянии сеанса вызывающего объекта.

Скрипты (.ps1), перечисленные в этом параметре, выполняются в состоянии сеанса модуля, а не в состоянии сеанса вызывающего объекта. Чтобы запустить скрипт в состоянии сеанса вызывающего объекта, укажите имя файла скрипта в параметре ScriptsToProcess.

Например, при импорте этого манифеста модуль Helpers.psm1 загружается в состояние сеанса корневого модуля. Все командлеты, объявленные в вложенном модуле, экспортируются, если иное не ограничено.

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

FunctionsToExport

Этот параметр задает функции, экспортируемые модулем. Этот параметр можно использовать для ограничения функций, экспортируемых модулем. Он может удалить функции из списка экспортированных функций, но он не может добавлять функции в список.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Да

В этом параметре можно указать записи с подстановочными знаками. Экспортируются все соответствующие функции в списке экспортированных функций.

Кончик

Для повышения производительности и возможности обнаружения всегда следует явно перечислять функции, которые нужно экспортировать в этом параметре без использования подстановочных знаков.

Например, при импорте модуля с закомментированным параметром все функции в корневом модуле и все вложенные модули экспортируются.

@{
    # FunctionsToExport = @()
}

Этот манифест функционально идентичен указанию параметра вообще.

@{
    FunctionsToExport = '*'
}

При FunctionsToExport задать пустой массив, при импорте этого модуля нет функций корневого модуля или экспорта вложенных модулей.

@{
    FunctionsToExport = @()
}

Заметка

Если вы создаете манифест модуля с помощью команды New-ModuleManifest и не указываете параметр FunctionsToExport, созданный манифест имеет этот параметр, указанный в качестве пустого массива. Если манифест не редактируется, никакие функции из модуля не экспортируются.

Если параметр FunctionsToExport включает только функцию Get-Example, при импорте этого модуля становится доступной только функция Get-Example, даже если другие функции экспортируются корневым модулем или любыми вложенными модулями.

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

Если FunctionsToExport задать строку подстановочного знака, при импорте этой функции любой функции, имя которой заканчивается Example, становится доступным, даже если другие функции экспортируются в качестве членов модуля корневым модулем или любыми вложенными модулями.

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

КомандлетыToExport

Этот параметр указывает командлеты, экспортируемые модулем. Этот параметр можно использовать для ограничения командлетов, экспортируемых модулем. Он может удалить командлеты из списка экспортированных участников модуля, но он не может добавлять командлеты в список.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Да

В этом параметре можно указать записи с подстановочными знаками. Экспортируются все соответствующие командлеты в списке экспортированных командлетов.

Кончик

Для повышения производительности и обнаружения всегда следует явно перечислять командлеты, которые нужно экспортировать в этом параметре без использования подстановочных знаков.

Например, при импорте модуля с этим параметром закомментировано, экспортируются все командлеты в корневом модуле и все вложенные модули.

@{
    # CmdletsToExport = @()
}

Этот манифест функционально идентичен указанию параметра вообще.

@{
    CmdletsToExport = '*'
}

При КомандлетыToExport задать пустой массив, при импорте этого модуля нет командлетов корневого модуля или экспорта вложенных модулей.

@{
    CmdletsToExport = @()
}

Заметка

Если вы создаете манифест модуля с помощью команды New-ModuleManifest и не указываете параметр КомандлетыToExport, созданный манифест имеет этот параметр, указанный в качестве пустого массива. Если манифест не редактируется, из модуля не экспортируются командлеты.

Если КомандлетыToExport включать только командлет Get-Example, при импорте этого модуля становится доступным только командлет Get-Example, даже если другие командлеты экспортируются корневым модулем или любыми вложенными модулями.

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

Если КомандлетыToExport задать строку подстановочного знака, при импорте этого модуля любой командлет, имя которого заканчивается Example, становится доступным, даже если другие командлеты экспортируются в качестве членов модуля корневым модулем или любыми вложенными модулями.

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

ПеременныеToExport

Этот параметр задает переменные, экспортируемые модулем. Этот параметр можно использовать для ограничения переменных, экспортируемых модулем. Он может удалить переменные из списка экспортированных элементов модуля, но он не может добавлять переменные в список.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Да

В этом параметре можно указать записи с подстановочными знаками. Экспортируются все соответствующие переменные в списке экспортированных элементов модуля.

Кончик

Для повышения производительности и возможности обнаружения всегда следует явно перечислять переменные, которые нужно экспортировать в этом параметре без использования подстановочных знаков.

Например, при импорте модуля с комментарием этого параметра все переменные в корневом модуле и все вложенные модули экспортируются.

@{
    # VariablesToExport = @()
}

Этот манифест функционально идентичен указанию параметра вообще.

@{
    VariablesToExport = '*'
}

Заметка

Если вы создаете манифест модуля с помощью команды New-ModuleManifest и не указываете параметр ПеременныеToExport, созданный манифест имеет этот параметр, указанный как '*'. Если манифест не редактируется, все переменные из модуля экспортируются.

При ПеременныеToExport задать в качестве пустого массива, при импорте этого модуля нет переменных корневого модуля или экспорта вложенных модулей.

@{
    VariablesToExport = @()
}

Если ПеременныеToExport включать только переменную SomeExample, при импорте этого модуля становится доступной только переменная $SomeExample, даже если другие переменные экспортируются корневым модулем или любыми вложенными модулями.

@{
    VariablesToExport = @(
        'SomeExample'
    )
}

Если ПеременныеToExport задать с подстановочной строкой, при импорте этой переменной любой переменной, имя которой заканчивается Example, становится доступным, даже если другие переменные экспортируются в качестве членов модуля корневого модуля или всех вложенных модулей.

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

DscResourcesToExport

Этот параметр указывает ресурсы DSC, экспортируемые модулем. Этот параметр можно использовать для ограничения ресурсов DSC на основе классов, экспортированных модулем. Он может удалить ресурсы DSC из списка экспортированных элементов модуля, но он не может добавить ресурсы DSC в список.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Да

В этом параметре можно указать записи с подстановочными знаками. Экспортируются все соответствующие ресурсы DSC на основе классов в модуле.

Кончик

Для обнаружения необходимо всегда явно перечислить все ресурсы DSC, экспортируемые модулем.

Дополнительные сведения о создании и использовании ресурсов DSC см. в документации по для DSC.

Этот манифест экспортирует все ресурсы DSC на основе классов и MOF, определенные в корневом модуле и всех вложенных модулях.

@{
    # DscResourcesToExport = @()
}

Этот манифест экспортирует все ресурсы DSC на основе MOF, определенные в корневом модуле и всех вложенных модулях, но только один класс DSC Resource, ExampleClassResource.

@{
    DscResourcesToExport = @(
        'ExampleClassResource'
    )
}

Этот манифест экспортирует все ресурсы DSC, которые он включает. Даже если ресурс MOF-Based не указан, модуль по-прежнему экспортирует его.

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

ModuleList

Этот параметр представляет собой информационный список инвентаризации модулей, включенных в этот параметр. Этот список не влияет на поведение модуля.

Ценность
тип ввода System.String[], System.Collections.Hashtable[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Записи для этого параметра могут быть именем модуля, полной спецификацией модуля или путем к файлу модуля или скрипта.

Если значение является путем, путь может быть полностью или относительным.

Если значение является именем модуля или спецификацией, PowerShell выполняет поиск PSModulePath для указанного модуля.

Спецификация модуля — это хэш-таблица со следующими ключами.

  • ModuleName - Обязательный. Указывает имя модуля.
  • GUID - необязательный. Указывает GUID модуля.
  • Это также Обязательный, чтобы указать хотя бы один из трех приведенных ниже ключей. Ключ RequiredVersion нельзя использовать с ключами ModuleVersion или MaximumVersion. Можно определить допустимый диапазон версий для модуля, указав ModuleVersion и MaximumVersion ключи вместе.
    • ModuleVersion. Указывает минимальную допустимую версию модуля.
    • RequiredVersion . Указывает точную, требуемую версию модуля.
    • MaximumVersion. Указывает максимальную допустимую версию модуля.

Заметка

RequiredVersion добавлен в Windows PowerShell 5.0. MaximumVersion добавлен в Windows PowerShell 5.1.

Этот манифест не предоставляет информационный список модулей, которые он включает. Он может или не иметь модулей. Несмотря на то что этот параметр не указан, все модули, перечисленные в RootModule, ScriptsToProcessили Вложенныеmodules параметры по-прежнему работают нормально.

@{
    # ModuleList = @()
}

Этот манифест объявляет, что в папке Example.psm1 в папке First.psm1 содержатся только модули, а подмодулы Second.psm1 и Submodules.

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

FileList

Этот параметр представляет собой информационный список инвентаризации файлов, включенных в этот модуль. Этот список не влияет на поведение модуля.

Ценность
тип ввода System.String[]
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Да

Записи для этого параметра должны быть относительным путем к файлу из папки, содержащей манифест модуля.

Когда пользователь вызывает Get-Module к манифесту с заданным параметром, свойство FileList содержит полный путь к этим файлам, присоединяя путь модуля к относительному пути каждой записи.

Этот манифест не содержит список его файлов.

@{
    # FileList = @()
}

Этот манифест объявляет, что в этом параметре перечислены только те файлы, которые он включает.

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

PrivateData

Этот параметр определяет хэш-таблицу данных, доступную для любых команд или функций в области корневого модуля.

Ценность
тип ввода System.Collections.Hashtable
обязательный PowerShell GalleryКрещендо
значение , если не задано $null
Принимает подстановочные знаки Нет

При экспорте манифеста Crescendo для создания нового модуля Export-CrescendoModule добавляет два ключа в PrivateData

  • CrescendoGenerated — метка времени экспорта модуля
  • CrescendoVersion — версия Crescendo, используемая для экспорта модуля

Вы можете добавить собственные ключи для хранения метаданных, которые необходимо отслеживать. Все ключи, добавленные в этот параметр, доступны для функций и командлетов в корневом модуле с помощью $MyInvocation.MyCommand.Module.PrivateData. Хэш-таблица недоступна в самой области модуля, только в командлетах, которые определены в модуле.

Например, этот манифест определяет ключ PublishedDate в PrivateData.

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

Командлеты в модуле могут получить доступ к этому значению с помощью переменной $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"
    }
}

После импорта модуля функция использует значение из PrivateData, чтобы определить, когда модуль был опубликован.

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

Дочернее свойство PSData PSData определяет хэш-таблицу значений, поддерживающих определенные сценарии расширения.

Ценность
тип ввода System.Collections.Hashtable
обязательный PowerShell Gallery, экспериментальные функции, модули Crescendo
значение , если не задано $null
Принимает подстановочные знаки Нет

Дочернее свойство PSData PSData используется для следующих сценариев:

  • PowerShell Gallery — При создании манифеста модуля с помощью New-ModuleManifest командлета предварительно заполняется хэш-файл PSData с ключами заполнителей, необходимыми при публикации модуля в него PowerShell Gallery. Дополнительные сведения о манифестах модуля и публикации в коллекции PowerShell см. в разделе "Значения манифеста пакета", влияющие PowerShell Gallery на пользовательский интерфейс.
  • Экспериментальные функции — метаданные о экспериментальной функции хранятся в свойстве ExperimentalFeaturesPSData. Свойство ExperimentalFeatures является массивом хэш-элементов, содержащих имя и описание функции. Дополнительные сведения см. в разделе Объявление экспериментальных функций в модулях.
  • Модули Crescendo. При экспорте манифеста Crescendo для создания нового модуля Export-CrescendoModule добавляет значение CrescendoBuilt в свойство PSData.Tags. Этот тег можно использовать для поиска модулей, PowerShell Gallery созданных с помощью Crescendo. Дополнительные сведения см. в разделе Export-CrescendoModule.
  • Свойство PSData.ExternalModuleDependencies представляет собой массив имен модулей, которые являются зависимостями для этого модуля. Это свойство является информационным только и не влияет на установку или загрузку модуля.

HelpInfoURI

Этот параметр задает интернет-адрес XML-файла HelpInfo для модуля.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Это значение параметра должно быть универсальным идентификатором ресурса (URI), который начинается с http или https.

XML-файл HelpInfo поддерживает обновляемую функцию справки, представленную в PowerShell 3.0. Он содержит сведения о расположении скачиваемых файлов справки для модуля и номера версий самых новых файлов справки для каждого поддерживаемого языкового стандарта.

Сведения о обновляемой справке см. в about_Updatable_Help. Сведения о XML-файле HelpInfo см. в поддержке обновляемой справки.

Например, этот модуль поддерживает обновляемую справку.

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

DefaultCommandPrefix

Этот параметр задает префикс, который предопределен к существительным всех команд в модуле при их импорте в сеанс. Префиксы помогают предотвратить конфликты имен команд в сеансе пользователя.

Ценность
тип ввода System.String
обязательный Нет
значение , если не задано $null
Принимает подстановочные знаки Нет

Пользователи модуля могут переопределить этот префикс, указав параметр префикса командлета Import-Module.

Этот параметр появился в PowerShell 3.0.

При импорте этого манифеста все командлеты, импортированные из этого модуля, Example предопределены существительным в имени. Например, Get-Item импортируется как Get-ExampleItem.

@{
    DefaultCommandPrefix = 'Example'
}

См. также