Конфигурации 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. Дополнительные сведения см. в разделе о расположении ресурса.