При использовании push-метода применения конфигураций на серверы существует одна проблема – DSC на целевой системе не проверяет наличие необходимых ресурсов DSC. Это может привести к тому, что конфигурация применится не полностью. Что нас конечно же не устраивает. Поэтому необходимо обеспечить наличие всех необходимых ресурсов DSC, которые используются в конфигурации. Тут возможны два варианты:
- Использование pull-сервера для применения конфигурации
- Ручная установка необходимых модулей
Первый вариант мы пока опустим. А вот второй вариант рассмотрим подробнее. Любой модуль с ресурсами DSC имеет вполне определённую структуру и ставится по одному из путей указанных в переменной $env:PSModulePath. Модули обычно поставляются в виде архива, который содержит всю необходимую структуру папок со всеми необходимыми файлами. Задача сводится к следующему – необходимо на целевой сервер скопировать архив, содержащий файлы модуля и распаковать его по пути, указанному в переменной $env:PSModulePath. Задачу можно выполнить средствами DSC, используя ресурсы File (для копирования) и Archive (для распаковки архива). Файл конфигурации получается примерно следующего вида:
Configuration InstallDSCRes
{
param ($modulePath = ($env:PSModulePath -split ';' |
? {$_ -match 'Program Files\\WindowsPowerShell'}),
$Server = @('someserver'))
Node $Server
{
File DSCResFile
{
SourcePath = "\\share.server\Distr\DscRes_1.0.0.0.zip"
DestinationPath = "c:\Distr"
Ensure = "Present"
Type = "File"
Checksum = "SHA-256"
Force = $true
}
Archive UnzipModule
{
DependsOn = "[File]DSCResFile"
Path = "c:\Distr\DscRes_1.0.0.0.zip"
Destination = $modulePath
Ensure = "Present"
}
}
}
InstallDSCRes -OutputPath C:\Configs\dsc
Затем запускаем применение конфигурации:
Start-DscConfiguration -Path C:\Configs\dsc -Wait -Verbose
Ссылки:
Resource authoring checklist
Use DSC to Install Windows PowerShell DSC Resource Kit Bits