Главная > Powershell > Введение в Powershell Desired State Configuration

Введение в Powershell Desired State Configuration

Ещё в начале года прошёл курс по PowerShell Desired State Configuration в MVA (кстати, кто не знаком – настоятельно рекомендую Microsoft Virtual Academy – бесплатные курсы по технологиям Microsoft) и приблизительно с тех же пор хотел поделиться полученными знаниями, всё руки не доходили. И вот свершилось…

PowerShell Desired State Configuration (DSC) – настройка требуемого состояния – очень мощный инструмент, который может значительно облегчить процесс настройки системы.

Используя DSC, мы описываем как хотим, чтобы выглядела система в конечном итоге, не вдаваясь в подробности, далее происходит её автоматическая настройка в соответствии с заданными требованиями.

Т.е. говоря простыми словами, если нам нужно чтобы в реестре был определённый ключ, чтобы какая-нибудь служба была запущена, какой-нибудь компонент Windows установлен (или наоборот – чтобы чего-то не было, или было выключено), то при традиционном подходе мы должны сами написать проверку каждого требования, и если что-то не соответствует – поправить (опять-таки сами – создать, остановить, доустановить и т.д.).

При использовании DSC всё упрощается – мы просто говорим, что в реестре должен быть такой-то ключ, на диске должен быть такой-то каталог, служба – отключена и .т.д., т.е. просто перечисляем требования.

Далее Powershell смотрит наши требования, и если заданные настройки совпадают с тем, что есть в системе – ничего не происходит, а если отличаются – они будут изменены согласно заданным настройкам.

Системные требования

Особых системных требований для Desired State Configuration нет.  DSC – это технология Microsoft, представленная в WMF 4.0. Соответственно, для того, чтобы DSC корректно работала, нужен Windows Management Framework 4.0, или выше. В Windows 8.1 и Windows Server 2012 R2 WMF 4.0 уже установлен. Также он доступен для Windows 7, Windows Server 2008 R2 и Windows Server 2012 (также нужно не забыть установить .NET 4.5). Т.е. если вы обновляете свою систему, то вам, скорее всего, ничего не нужно доустанавливать.

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

Работа с DSC начинается с конфигурационного скрипта, в котором мы описываем как хотим, чтобы выглядела система. Сам по себе скрипт ничего не делает.

Требуемые настройки – (конфигурация) описываются в блоке Configuration, которому нужно задать имя. Внутри блока Configuration указываются настройки для каждого из компьютеров (если нужно настроить несколько компьютеров).

Блок конкретного компьютера начинается с ключевого слова Node. За ним идёт имя компьютера, которое может быть как постоянным, так и задаваться при помощи переменной:

Configuration ServerConfiguration
{
    Node Node01
        {...}
    Node Server
        {...}
    Node FileServer
        {...}
}

Внутри блока Node прописываются настройки для компьютера, с помощью ресурсов:

Configuration MyConfiguration
{
    Node MyComputer
        {
            WindowsFeature Resource01
            {...}
            File Resource02
            {...}
            Service Resource03
            {...}
        }
}

Ресурсы DSC – говоря умным языком – это специализированные модули PowerShell, с помощью которых осуществляется настройка компьютеров. Если по простому – это то, что можно настроить при помощи DSC: файлы/каталоги, службы, компоненты Windows и т.д. Таких ресурсов предусмотрено 12, узнать что это за ресурсы можно при помощи командлета Get-DSCResource:

DSC - Get-Resource

Описание встроенных ресурсов можно найти в соответствующей статье.

Если чего-то вдруг не хватает – можно дописать свои.

Пишем конфигурацию

Итак, допустим для наших задач нам нужно чтобы

  • в системе присутствовал каталог C:\temp
  • служба DHCP, была остановлена
  • был запущен процесс калькулятор
  • в реестре был ключ HKEY_LOCAL_MACHINE\SOFTWARE\MySoft\String\test, со значением “Hello!” (строкового типа).

Вот так нежизненный пример, зато каждый сможет повторить дома, без всяких серверов и серьёзных изменений в системе.

Рассмотрим описание одного ресурса подробно (на примере каталога)…

При помощи ключа Ensure задаётся наличие или отсутствие соответствующей настройки. Он может принимать два значения:

  • Present – настройка должна быть включена – каталог должен присутствовать, процесс должен быть запущен и т.д. Если нет – создать, запустить и т.д.
  • Absent – настройка должна быть выключена – каталога быть не должно, процесс не должен быть запущен и т.д. Есть есть – удалить, остановить и т.д.

В нашем случае

Ensure = "Present"

Идём дальше. С файлами и каталогами работает ресурс File. По умолчанию он работает с файлами, поэтому нужно явно указать, что нам нужен каталог:

Type = "Directory"

И путь к нему:

DestinationPath = "C:\Temp"

В готовом виде настройка для каталога будет выглядеть так:

File CreateDir
{
    Ensure = "Present"
    Type = "Directory"
    DestinationPath = "C:\Temp"
}

Аналогичным образом пишутся настройки для других ресурсов. Узнать какие ключи доступны для каждого ресурса можно узнать всё там же.

Конфигурация в целом будет выглядеть следующим образом:

Configuration MyConfiguration
{
    Node MyComputer
    {
        File CreateDir
        {
            Ensure = "Present"
            Type = "Directory"
            DestinationPath = "C:\Temp"
        }
        
        Service StopDHCP
        {
            Name = "DHCP"
            State = "Stopped"
        }
        
        WindowsProcess RunCalc
        {
            Ensure = "Present"
            Path = "C:\WINDOWS\system32\calc.exe"
            Arguments = ""
        }
        
        Registry RegSettings
        {
            Ensure = "Present"
            # Путь к ключу реестра
            Key = "HKEY_LOCAL_MACHINE\SOFTWARE\MySoft"
            # Имя параметра
            ValueName = "test"
            # Значение параметра
            ValueData = "Hello!"
            # Тип
            ValueType = "String"
        }
    }
}

Примечание: для ресурса File обязательным является указание ключа Arguments, в котором указываются параметры процесса. Если таковых нет (как в нашем случае) – нужно указать пустую строку.

Для ресурса, отвечающего за настройку служб (Service) не предусмотрен ключ Ensure, вместо него есть ключ State, указывающий в каком состоянии должна находиться служба: запущена (Running), или остановлена (Stopped).

Конфигурация ведёт себя так же как функция: если её просто скомпилировать ничего не произойдёт. Её нужно вызвать. Для этого в конфигурационном скрипте последней строкой можно дописать имя нашей конфигурации:

Configuration MyConfiguration
{
    Node MyComputer
    {
        ...
    }
}

MyConfiguration

Или запустить её вручную.

В результате её выполнения будет создан файл [имя_компьютера].mof (Managed Object Format). Для нашего примера это MyComputer.mof. Это текстовый файл, в котором содержатся все требования по настройке, которые будут применяться к компьютеру. (Т.е. можно сказать, что выполнив конфигурацию мы перевели требования к компьютеру с понятного нам языка, на язык MOF – Managed Object Format, но над этим можно не задумываться – просто выполнить и всё). Следует отметить, что использование MOF-файлов позволяет использовать DSC для настройки компьютеров не только под управлением Windows, но и Linux.

Примечание: перед тем, как компилировать лучше задать текущим какой-нибудь удобный путь (например тот же, где лежит конфигурационный скрипт), в таком случае .mof-файл будет помещён в каталог с названием конфигурации, по этому пути. В противном случае для успешного результата нужно запускать Powershell от имени администратора, так как по умолчанию Powershell пытается положить mof-файл в каталог %systemroot%/system32.

В результате успешного выполнения вы получите подтверждение:

DSC - MOF-File

Далее остаётся запустить выполнение самой конфигурации. Это делается при помощи командлета Start-DSCConfiguration. В качестве параметра ему нужно указать путь к каталогу, в котором лежит mof-файл:

Start-DscConfiguration -Path E:\DSC\MyConfiguration

В результате выполнения этого командлета если настройка компьютера соответствовала требованиям ничего не изменится, а если нет – настройки будет изменены согласно требованиям.

Для отслеживания соответствия компьютера заданным настройкам используется командлет Test-DSCConfiguration. Он возвращает True, если настройки совпадают, и False – если не совпадают, при этом не объясняя в чём дело. А нам и не нужно это знать – для того, чтобы вернуть конфигурацию достаточно снова выполнить командлет Start-DSCConfiguration.

Существует возможность развернуть так называемый Pull Server, который будет периодически проверять правильность настроек на клиентских компьютерах, и если клиент не соответствует настройкам – Pull Server будет отправлять на него требуемые настройки. Но это, как говорится, отдельный случай.

Реклама
Рубрики:Powershell Метки: ,
  1. Андрей
    07/08/2015 в 16:48

    Попробовал создать каталог — не получилось.
    Такой код:

    Configuration MyConfiguration
    {
    Node trex
    {
    File CreateDir
    {
    Ensure = «Present»
    Type = «Directory»
    DestinationPath = «E:\Temp»
    }
    }
    }

    MyConfiguration

    и запуск:

    Start-DscConfiguration -Path E:\MyConfiguration

    и.. ничего. Нет папки. Имя компьютера произвольно задается или точно нужно указать?

    • 09/08/2015 в 22:21

      Что значит «Имя компьютера произвольно задается или точно нужно указать?» На каком компьютере будете выполнять, то имя и указываете. Конфигурацию запускаете от имени администратора?

  2. Андрей
    10/08/2015 в 09:08

    От админа, да. Почему-то происходит не применение конфигурации, а запуск job’а

    Id Name PSJobTypeName State HasMoreData Location Command
    — —- ————- —— ———— ——— ——-
    2 Job2 Configuratio… Running True trex Start-DscConfiguration…

    Компонеты в системе вроде нужные присутствуют.

  3. Андрей
    10/08/2015 в 09:25

    Разобрался. Ключ verbose помог. Для работы DSC необходимо включить удаленное управление. Командлет Enable-PSRemoting в помощь.

  4. Андрей
    11/08/2015 в 22:21

    А можно попросить сделать обзор на WMF 5.0? Или пока толком неизвестно что там? Видел, что есть preview, но для непрофессионала разобраться, что там новое, а что нет будет проблематично.

    • 12/08/2015 в 13:40

      Я пока видел достаточно мало информации по WMF 5.0, но пожелание буду иметь в виду 🙂

  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: