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


Использование Import-DSCResource

Import-DSCResource — это динамическое ключевое слово, которое можно использовать только внутри блока сценария конфигурации для импорта любых ресурсов, необходимых в вашей конфигурации. Ресурсы в разделе $PSHOME импортируются автоматически, но по-прежнему рекомендуется явно импортировать все ресурсы, используемые в конфигурации.

Синтаксис для этого Import-DSCResource показан ниже. При указании модулей по именам необходимо перечислить каждый из них в новой строке.

Import-DscResource [-Name <ResourceName(s)>] [-ModuleName <ModuleName>] [-ModuleVersion <ModuleVersion>]

Параметры

  • -Name - Имена ресурсов DSC, которые необходимо импортировать. Если указано имя модуля, команда выполняет поиск этих ресурсов DSC в этом модуле; в противном случае команда выполняет поиск ресурсов DSC во всех путях к ресурсам DSC. Поддерживаются подстановочные знаки.
  • -ModuleName - Имя модуля или спецификация модуля. Если вы укажете ресурсы для импорта из модуля, команда попытается импортировать только эти ресурсы. Если указать только модуль, команда импортирует все ресурсы DSC в модуле.
  • -ModuleVersion - Начиная с PowerShell 5.0, вы можете указать, какую версию модуля должна использовать конфигурация. Дополнительные сведения см. в разделе Импорт определенной версии установленного ресурса.
Import-DscResource -ModuleName xActiveDirectory

Пример: использование Import-DSCResource в конфигурации

Configuration MSDSCConfiguration
{
    # Search for and imports Service, File, and Registry from the module PSDesiredStateConfiguration.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration -Name Service, File, Registry

    # Search for and import Resource1 from the module that defines it.
    # If only –Name parameter is used then resources can belong to different PowerShell modules as well.
    # TimeZone resource is from the ComputerManagementDSC module which is not installed by default.
    # As a best practice, list each requirement on a different line if possible.  This makes reviewing
    # multiple changes in source control a bit easier.
    Import-DSCResource -Name File
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the module PSDesiredStateConfiguration.
    # When specifying the modulename parameter, it is a requirement to list each on a new line.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration
    # In PowerShell 5.0 and later, you can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

Замечание

Указание нескольких значений для имен ресурсов и имен модулей в одной команде не поддерживается. Он может иметь недетерминированное поведение в отношении того, какой ресурс загружать из какого модуля, если один и тот же ресурс существует в нескольких модулях. Приведенная ниже команда приведет к ошибке во время компиляции.

Import-DscResource -Name UserConfigProvider*,TestLogger1 -ModuleName UserConfigProv,PsModuleForTestLogger

Что следует учитывать при использовании только параметра Name:

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

Рекомендуется указывать –ModuleName с помощью параметра -Name , как описано ниже.

Такое использование имеет следующие преимущества:

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

Замечание

В PowerShell 5.0 ресурсы DSC могут иметь несколько версий, а версии могут быть установлены на компьютере параллельно. Это реализуется путем наличия нескольких версий модуля ресурсов, содержащихся в одной папке модуля. Дополнительные сведения см. в разделе Использование ресурсов с несколькими версиями.

Intellisense с Import-DSCResource

При создании конфигурации DSC в интегрированной среде сценариев PowerShell предоставляет IntelliSense для ресурсов и свойств ресурсов. Определения ресурсов в $pshome пути к модулю загружаются автоматически. При импорте ресурсов с помощью Import-DSCResource ключевого слова добавляются указанные определения ресурсов, а Intellisense расширяется за счет включения схемы импортируемого ресурса.

Intellisense в интегрированной среде сценариев для ресурса DSC

Замечание

Начиная с PowerShell 5.0, в интегрированную среду сценариев добавлено заполнение вкладок для ресурсов DSC и их свойств. Дополнительные сведения см. в статье о ресурсах DSC.

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

  • Используются только свойства, определенные в схеме.
  • Типы данных для каждого свойства правильные.
  • Свойства ключей указываются.
  • Свойство, доступное только для чтения, не используется.
  • Валидация на типах карт значений.

Рассмотрим следующую конфигурацию:

Configuration SchemaValidationInCorrectEnumValue
{
    # It is best practice to explicitly import all resources used in your Configuration.
    # This includes resources that are imported automatically, like WindowsFeature.
    Import-DSCResource -Name WindowsFeature
    Node localhost
    {
        WindowsFeature ROLE1
        {
            Name = "Telnet-Client"
            Ensure = "Invalid"
        }
    }
}

Компиляция этой конфигурации приводит к ошибке.

PSDesiredStateConfiguration\WindowsFeature: At least one of the values 'Invalid' is not supported or
valid for property 'Ensure' on class 'WindowsFeature'. Please specify only supported values:
Present, Absent.

IntelliSense и проверка схемы позволяют отлавливать больше ошибок во время синтаксического анализа и компиляции, избегая сложностей во время выполнения.

Замечание

Каждый ресурс DSC может иметь имя и FriendlyName , определенный схемой ресурса. Ниже приведены первые две строки "MSFT_ServiceResource.shema.mof".

[ClassVersion("1.0.0"),FriendlyName("Service")]
class MSFT_ServiceResource : OMI_BaseResource

При использовании этого ресурса в Конфигурации вы можете указать MSFT_ServiceResource или Сервис.

Различия PowerShell v4 и v5

Существует множество различий, которые вы видите при создании конфигураций в PowerShell 4.0 и PowerShell 5.0 и более поздних версиях. В этом разделе будут выделены различия, которые вы видите в этой статье.

Несколько версий ресурсов

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

На изображении ниже установлены две версии модуля xPSDesiredStateConfiguration .

Несколько версий ресурсов, установленных в папке

Скопируйте содержимое нужной версии модуля на верхний уровень каталога модулей.

Скопируйте нужную версию в каталог модуля верхнего уровня

Расположение ресурса

При создании и компиляции конфигураций ваши ресурсы могут храниться в любом каталоге, указанном в вашем PSModulePath. В PowerShell 4.0 LCM требует, чтобы все модули ресурсов DSC хранились в папке "Program Files\WindowsPowerShell\Modules" или $pshome\Modules. Начиная с PowerShell 5.0, это требование было удалено, и модули ресурсов могут храниться в любом каталоге, указанном в PSModulePath.

Добавлен ModuleVersion

Начиная с PowerShell 5.0, этот -ModuleVersion параметр позволяет указать, какую версию модуля следует использовать в конфигурации.

См. также