Использование 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

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

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

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

Это обеспечивает следующие преимущества:

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

Примечание

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

Технология IntelliSense с Import-DSCResource

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

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

Примечание

Начиная с PowerShell 5.0 в ISE было добавлено завершение нажатием клавиши TAB для ресурсов 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 или Service.

Различия PowerShell версий 4 и 5

Существует несколько различий, заметных при создании конфигураций в PowerShell версии 4.0, 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 позволяет указать версию модуля для использования в конфигурации.

См. также раздел