При использовании 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