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


Конфигурации 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 и указать имя. В этом случае имя конфигурации — MyDscConfiguration.
  • Один или несколько блоков Node . Они определяют узлы (компьютеры или виртуальные машины), которые вы настраиваете. В приведенной выше конфигурации есть один блок Node , предназначенный для компьютера с именем TEST-PC1. Блок Node может принимать несколько имен компьютеров.
  • Один или несколько ресурсных блоков. Здесь конфигурация задает свойства для ресурсов, которые она конфигурирует. В данном случае имеется два ресурсных блока, каждый из которых вызывает ресурс WindowsFeature .

Замечание

Ресурс WindowsFeature DSC доступен только на компьютерах с 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). Вы можете сделать это либо с помощью "dot-sourcing" скрипта, либо запустив сценарий конфигурации с помощью F5 или нажав кнопку "Run Script " в интегрированной среде сценариев. Чтобы создать исходный код по точке, выполните команду . .\myConfig.ps1 , в которой myConfig.ps1 указано имя файла скрипта, содержащего вашу конфигурацию.

Когда вы вызываете конфигурацию, она:

  • Разрешает все переменные
  • Создает папку в текущем каталоге с именем, совпадающим с именем конфигурации.
  • Создает файл с именем NodeName.mof в новом каталоге, где NodeName — это имя целевого узла конфигурации. Если узлов несколько, для каждого узла будет создан файл 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 поставляется с 12 ресурсами в составе модуля PSDesiredStateConfiguration.

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

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

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

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

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

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

См. также