Конфигурации DSC

Область применения: Windows PowerShell 4.0, Windows PowerShell 5.0

Конфигурации DSC — это сценарии PowerShell, определяющие особый тип функции. Для определения конфигурации используйте ключевое слово PowerShell Configuration.

Configuration MyDscConfiguration {
    Node "TEST-PC1" {
        WindowsFeature MyFeatureInstance {
            Ensure = 'Present'
            Name = 'RSAT'
        }
        WindowsFeature My2ndFeatureInstance {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}
MyDscConfiguration

Сохраните скрипт в виде файла .ps1.

Синтаксис конфигурации

Сценарий конфигурации состоит из следующих элементов:

  • Блок Configuration. Это основной блок сценария. Для его определения необходимо использовать ключевое слово Configuration и указать имя. В этом случае конфигурация имеет MyDscConfigurationимя .
  • Один блок Node или несколько. Определяют настраиваемые вами узлы (компьютеры или виртуальные машины). В приведенной выше конфигурации существует один блок Node , предназначенный для компьютера с именем TEST-PC1. Блок Node может принимать несколько имен компьютеров.
  • Один блок ресурсов или несколько. В этих блоках конфигурация определяет свойства настраиваемых ресурсов. В этом случае существует два блока ресурсов, каждый из которых вызывает ресурс WindowsFeature .

Примечание

Ресурс DSC WindowsFeature доступен только на компьютерах Windows Server. Для компьютеров с клиентской ОС, например Windows 11, необходимо использовать WindowsOptionalFeature. Дополнительные сведения см. в разделе "WindowsOptionalFeature" документации по PSDscResources.

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

В этом примере вы указываете имя узла, передавая его как параметр ComputerName при компиляции конфигурации. По умолчанию используется localhostимя .

Configuration MyDscConfiguration
{
    param
    (
        [string[]]$ComputerName='localhost'
    )

    Node $ComputerName
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

Блок Node также может принимать несколько имен компьютеров. В приведенном выше примере вы можете использовать параметр -ComputerName или передать разделенный запятыми список компьютеров непосредственно в блок Node.

MyDscConfiguration -ComputerName "localhost", "Server01"

При указании списка компьютеров в блоке Node из конфигурации необходимо использовать нотацию массива.

Configuration MyDscConfiguration
{
    Node @('localhost', 'Server01')
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

Компиляция конфигурации

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

Примечание

Для вызова конфигурации функция должна находиться в глобальной области видимости (как и любая другая функция PowerShell). Для этого нужно либо использовать вызов сценария с точкой, либо выполнить сценарий конфигурации, нажав клавишу F5 или кнопку Выполнить сценарий в интегрированной среде сценариев. Чтобы использовать вызов сценария с точкой, выполните команду . .\myConfig.ps1, где myConfig.ps1 — это имя файла сценария, который содержит конфигурацию.

При вызове конфигурации она выполняет следующие действия:

  • разрешает все переменные;
  • создает папку в текущем каталоге с тем же именем, что и у конфигурации;
  • создает файл с именем имя_узла.mof в новой папке, где имя_узла — это имя целевого узла конфигурации. Если узлов несколько, MOF-файл создается для каждого из них.

Примечание

MOF-файл содержит все сведения о конфигурации целевого узла. Поэтому его необходимо хранить в безопасном месте. Дополнительные сведения см. в статье Защита MOF-файла.

При компиляции первой приведенной конфигурации создается следующая структура папок:

. .\MyDscConfiguration.ps1
MyDscConfiguration
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/23/2015   4:32 PM           2842 localhost.mof

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

. .\MyDscConfiguration.ps1
MyDscConfiguration -ComputerName 'MyTestNode'
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/23/2015   4:32 PM           2842 MyTestNode.mof

Использование новых ресурсов в конфигурации

Выполняя предыдущие примеры, вы могли заметить предупреждение о том, что используемый ресурс не импортирован. Сейчас DSC поставляется с модулем PSDesiredStateConfiguration, в который входят 12 ресурсов.

Командлет Get-DscResource позволяет определить, какие ресурсы установлены в системе и доступны для использования LCM. После добавления в $env:PSModulePath и правильного распознавания командлетом Get-DscResource эти модули нужно будет загрузить в конфигурацию.

Import-DscResource — это динамическое ключевое слово, распознаваемое только в блоке Configuration, и оно не является командлетом. Import-DscResource поддерживает два параметра:

  • Параметр ModuleName — рекомендуемый способ применения Import-DscResource. Он принимает имя модуля, содержащего ресурсы для импорта (а также массив строк с именами модулей).
  • Параметр Name — имя импортируемого ресурса. Это не то понятное имя, которое возвращается командлетом Get-DscResource, а имя класса, используемое при определении схемы ресурса (возвращается как параметр ResourceType командлетом Get-DscResource).

Дополнительные сведения об использовании Import-DSCResource см. в статье об использовании Import-DSCResource.

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

Из-за существующих различий ресурсы DSC должны храниться в PowerShell 4.0. Дополнительные сведения см. в разделе о расположении ресурса.

См. также