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


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

Область применения: PowerShell 7, функция конфигурации компьютера автоматического управления Azure

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

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

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

Параметры

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

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

Configuration MSDSCConfiguration {
    # Search for and imports two DSC Resources from the PSDscResources module.
    Import-DSCResource -ModuleName PSDscResources -Name Service, Registry

    # Search for and import Resource1 from the module that defines it. If only
    # the -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 Service
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the PSDscResources module.
    # When specifying the ModuleName parameter, it is a requirement to list each
    # on a new line.
    Import-DSCResource -ModuleName PSDscResources
    # You can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

Примечание

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

Import-DSCResource -Name Service, TimeZone -ModuleName PSDscResources, xPSDesiredStateConfiguration

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

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

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

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

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

Примечание

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

IntelliSense с Import-DSCResource

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

IntelliSense в VS Code для ресурса DSC

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

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

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

Configuration SchemaValidationInCorrectEnumValue {
    Import-DSCResource -Name User -Module PSDscResources

    User ExampleUser {
        UserName = 'ExampleDscUser'
        Ensure   = 'Invalid'
    }
}

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

Write-Error: C:\code\dsc\sample.ps1:4:5
Line |
   4 |      User ExampleUser {
     |      ~~~~
     | At least one of the values 'Invalid' is not supported or   
     | valid for property 'Ensure' on class 'User'. Please specify
     | only supported values: Present, Absent.

InvalidOperation: Errors occurred while processing configuration
'SchemaValidationInCorrectEnumValue'.

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

Примечание

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

[ClassVersion("1.0.0"), FriendlyName("User")]
class MSFT_UserResource : OMI_BaseResource

При использовании этого ресурса DSC в блоке Configuration можно указать MSFT_UserResource или User.

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