Бөлісу құралы:


Изменения в поведении Desired State Configuration PowerShell для конфигурации компьютера

Перед началом работы рекомендуется ознакомиться с обзором конфигурации компьютера.

Доступен пошаговый видеопросмотр этого документа.

Конфигурация компьютера использует PowerShell Desired State Configuration (PSDSC) версии 3 для аудита и настройки компьютеров. Эта конфигурация DSC определяет состояние, в котором должен находиться компьютер. Существует множество важных различий способов реализации DSC в конфигурации компьютера.

В конфигурации компьютера используется платформенная поддержка PowerShell 7

Конфигурация компьютера разработана таким образом, чтобы обеспечить согласованную работу по управлению Windows и Linux. В обеих средах операционных систем пользователь, хорошо знакомый с PowerShell DSC, может создавать и публиковать конфигурации, используя навыки написания сценариев.

Конфигурация компьютера использует только PowerShell DSC версии 3 и не зависит от предыдущей реализации DSC для Linux или nx* поставщиков, включенных в этот репозиторий.

Начиная с версии 1.26.33 конфигурация компьютера работает в PowerShell 7.1.2 для Windows и PowerShell 7.2, предварительная версия 6 для Linux. Начиная с версии 7.2 модуль PSDesiredStateConfiguration перемещен из части установки PowerShell и вместо этого устанавливается в качестве модуля из коллекция PowerShell.

Несколько конфигураций

Конфигурация компьютера поддерживает назначение нескольких конфигураций одному компьютеру. В пределах операционной системы расширения конфигурации компьютера никаких особых действий не требуется. Нет необходимости настраивать частичные конфигурации.

Зависимости управляются для каждой конфигурации

Когда конфигурация упаковается с помощью доступных средств, необходимые зависимости для конфигурации включаются в .zip файл. Компьютеры извлекают содержимое в уникальную папку для каждой конфигурации. Агент, предоставляемый расширением конфигурации компьютера, создает выделенный сеанс PowerShell для каждой конфигурации. В нем используется ограничение автоматической $Env:PSModulePath загрузки модуля только по пути, в котором был извлечен пакет.

Это изменение имеет несколько преимуществ:

  • Можно использовать разные версии модулей для каждой конфигурации на одном компьютере.
  • Если конфигурация больше не нужна на компьютере, агент безопасно удаляет всю папку, в которой была извлечена конфигурация. Вам не нужно управлять общими зависимостями в конфигурациях.
  • Управлять несколькими версиями модулей в центральной службе не требуется.

Артефакты управляются как пакеты

Функция настройки состояния службы автоматизации Azure включает в себя управление артефактами для модулей и скриптов конфигурации. После публикации обоих в службе скрипт можно скомпилировать в формате MOF. Аналогичным образом Windows Pull Server также требует управления конфигурациями и модулями в экземпляре веб-службы. В отличие от этого, расширение DSC имеет упрощенную модель, в которой все артефакты упаковываются вместе и хранятся в расположении, доступном на целевом компьютере с помощью HTTPS-запроса. Хранилище BLOB-объектов Azure является популярным вариантом размещения артефактов.

Конфигурация компьютера использует только упрощенную модель, в которой все артефакты упаковываются и доступны с целевого компьютера по протоколу HTTPS. Нет необходимости публиковать модули, скрипты или компилировать в службе. Одно из изменений заключается в том, что пакет всегда должен содержать скомпилированный MOF-файл. Невозможно включить файл скрипта в пакет и скомпилировать на целевом компьютере.

Максимальный размер пакета пользовательской конфигурации

В служба автоматизации Azure конфигурации состояния конфигурация DSC была ограничена размером. Конфигурация компьютера поддерживает общий размер пакета 100 МБ перед сжатием. В пакете нет конкретного ограничения на размер MOF-файла.

Режим конфигурации задается в артефакте пакета

При создании пакета конфигурации режим устанавливается с помощью следующих параметров:

  • Audit — проверяет соответствие компьютера. Внесение изменений не требуется.
  • AuditandSet — проверяет и исправляет состояние соответствия компьютера. Если компьютер не соответствует требованиям, вносятся изменения.

Режим устанавливается в пакете, а не в локальной службе Configuration Manager , так как каждая конфигурация может применяться с другим режимом.

Поддержка параметров через Azure Resource Manager

Параметры, заданные массивом свойств configurationParameter в назначениях конфигурации компьютера, перезаписывают статический текст в MOF-файле конфигурации при хранении файла на компьютере. Параметры позволяют настраивать и оператору управлять изменениями из API службы без необходимости выполнять команды на компьютере.

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

Набор триггеров с внешнего компьютера

Сложность в предыдущих версиях DSC исправляет смещение масштаба без использования большого объема пользовательского кода и зависит от удаленных подключений WinRM. Эта проблема решается гостевой конфигурацией. Пользователи конфигурации компьютера осуществляют контроль над корректировкой смещения за счет исправления методом Исправление по запросу.

Последовательность содержит метод Get

Если конфигурация компьютера выполняет аудит или настройку компьютера, для Windows и Linux используется одинаковая последовательность событий. Заметное изменение в поведении заключается в том, что Get метод вызывается службой для возврата сведений о состоянии компьютера.

  1. Сначала агент выполняет Test, чтобы определить, находится ли конфигурация в правильном состоянии.
  2. Если для пакета задано Auditзначение, логическое значение, возвращаемое функцией, определяет, должно ли быть Compliant состояние Azure Resource Manager для назначения гостей.NonCompliant
  3. Если для пакета задано AuditandSetзначение, логическое значение определяет, следует ли исправлять компьютер, применяя конфигурацию с помощью Set метода. Test Если метод возвращается$false, Set выполняется. Если Test возвращается $true, то Set не выполняется.
  4. В заключение, поставщик выполняет метод Get, возвращающий текущее состояние каждого параметра, чтобы получить сведения о том, почему компьютер не соответствует требованиям, и убедиться, что текущее состояние соответствует требованиям.

Специальные требования для Get

Метод DSC Get имеет особые требования к конфигурации компьютера, которые не были необходимы для DSC.

  • Возвращаемая хэш-таблица должна содержать свойство с именем "Причины".
  • Свойство Reasons должно быть массивом.
  • Каждый элемент в массиве должен быть хэш-таблицей с ключами с именем Code и Phrase.
  • Не следует возвращать значения, отличные от хэш-таблицы.

Свойство "Причины" используется службой для стандартизации представления сведений о соответствии. Вы можете подумать о каждом элементе в причинах как сообщение о том, как ресурс или не соответствует требованиям. Это свойство должно быть массивом, так как может существовать сразу несколько причин, из-за которых ресурс не соответствует требованиям.

Служба ожидает получить свойства Code и Phrase. При создании настраиваемого ресурса задайте текст, который вы хотите показать, как причина, по которой ресурс не соответствует значению для фразы. Code имеет требования к форматированию, которые позволяют четко отображать в отчетах сведения о ресурсе, используемом для аудита. Это решение делает гостевую конфигурацию расширяемой. Вы можете выполнять любую команду, которая поддерживает вывод выходных данных в виде строкового значения для свойства Phrase.

  • Код (строка): имя ресурса, повторяющееся, а затем короткое имя без пробелов в качестве идентификатора причины. Все три значения должны разделяться двоеточиями и не содержать пробелов.
    • Например, так: registry:registry:keynotpresent
  • Фраза (строка): читаемый человеком текст, чтобы объяснить, почему параметр не соответствует требованиям.
    • Например, так: The registry key $key isn't present on the machine.
$reasons = @()
$reasons += @{
  Code   = 'Name:Name:ReasonIdentifer'
  Phrase = 'Explain why the setting is not compliant'
}
return @{
    reasons = $reasons
}

При использовании средств командной строки для получения сведений, возвращаемых в Getсистему, можно найти, что средство возвращает выходные данные, которые вы не ожидали. Несмотря на то, что вы собираете выходные данные в PowerShell, они могут быть записаны в стандартную ошибку. Чтобы избежать этой проблемы, рассмотрите возможность перенаправления выходных данных в значение null.

Класс со свойством Reasons

В ресурсах на основе скриптов (только Для Windows) класс "Причины" включен в MOF-файл схемы следующим образом.

[ClassVersion("1.0.0.0")]
class Reason
{
  [Read] String Phrase;
  [Read] String Code;
};

[ClassVersion("1.0.0.0"), FriendlyName("ResourceName")]
class ResourceName : OMI_BaseResource
{
  [Key, Description("Example description")] String Example;
  [Read, EmbeddedInstance("Reason")] String Reasons[];
};

В ресурсах на основе классов (Windows и Linux) класс Reason включен в модуль PowerShell следующим образом. Linux учитывает регистр, поэтому C он Code P Phrase должен быть заглавным.

enum ensure {
  Absent
  Present
}

class Reason {
  [DscProperty()]
  [string] $Code

  [DscProperty()]
  [string] $Phrase
}

[DscResource()]
class Example {

  [DscProperty(Key)]
  [ensure] $ensure

  [DscProperty()]
  [Reason[]] $Reasons

  [Example] Get() {
    # return current current state
  }

  [void] Set() {
    # set the state
  }

  [bool] Test() {
    # check whether state is correct
  }
}

Если ресурс имеет обязательные свойства, эти свойства также должны быть возвращены Get параллельно с классом Reason . Если причина не включена, служба включает в себя поведение catch-all, которое сравнивает входные Get значения и значения, возвращаемые Get, и предоставляет подробное сравнение как причина.

Имена файлов конфигурации

Имя настраиваемой конфигурации должно быть одинаковым везде. Эти элементы должны иметь то же имя:

  • .zip Файл пакета содержимого
  • Имя конфигурации в MOF-файле
  • Имя назначения конфигурации компьютера в шаблоне Azure Resource Manager

Выполнение команд в Windows PowerShell

Запуск модулей Windows в PowerShell можно достичь с помощью приведенного ниже шаблона в ресурсах DSC. Приведенный ниже шаблон временно задает PSModulePath запуск Windows PowerShell вместо PowerShell для обнаружения необходимых модулей, доступных в Windows PowerShell. Этот пример представляет собой фрагмент кода, адаптированный из ресурса DSC, используемого в встроенном ресурсе DSC безопасного веб-сервера .

Этот шаблон временно задает путь выполнения PowerShell для запуска из Windows PowerShell и обнаруживает обязательный командлет, который в данном случае является Get-WindowsFeature. Выходные данные команды возвращаются, а затем стандартизованы для требований совместимости. После выполнения $env:PSModulePath командлета вернитесь к исходному пути.

# The Get-WindowsFeature cmdlet needs to be run through Windows PowerShell
# rather than through PowerShell, which is what the Policy engine runs.
$null = Invoke-Command -ScriptBlock {
    param ([string]$FileName)

    $InitialPSModulePath   = $env:PSModulePath
    $WindowsPSFolder       = "$env:SystemRoot\System32\WindowsPowershell\v1.0"
    $WindowsPSExe          = "$WindowsPSFolder\powershell.exe"
    $WindowsPSModuleFolder = "$WindowsPSFolder\Modules"
    $GetFeatureScriptBlock = {
        param([string]$FileName)

        if (Get-Command -Name Get-WindowsFeature -ErrorAction SilentlyContinue) {
            Get-WindowsFeature -Name Web-Server |
                ConvertTo-Json |
                Out-File $FileName
        } else {
            Add-Content -Path $FileName -Value 'NotServer'
        }
    }

    try {
        # Set env variable to include Windows Powershell modules so we can find
        # the Get-WindowsFeature cmdlet.
        $env:PSModulePath = $WindowsPSModuleFolder
        # Call Windows PowerShell to get the info about the Web-Server feature
        & $WindowsPSExe -command $WindowsFeatureScriptBlock -args $FileName
    } finally {
        # Reset the env variable even if there's an error.
        $env:PSModulePath = $InitialPSModulePath
    }
}

Общие функции DSC, недоступные в общедоступной предварительной версии конфигурации компьютера

Во время общедоступной предварительной версии конфигурация компьютера не поддерживает указание зависимостей между компьютерами с помощью WaitFor* ресурсов. Невозможно наблюдать за одним компьютером и ждать, пока другой компьютер достигнет состояния перед выполнением.

Обработка перезагрузки недоступна в общедоступной предварительной версии конфигурации компьютера, в том числе недоступна $global:DSCMachineStatus. Конфигурации не могут перезагружать узел во время или в конце конфигурации.

Известные проблемы совместимости с поддерживаемыми модулями

Модуль PsDscResources в коллекция PowerShell и модуле PSDesiredStateConfiguration, которые поставляется с Windows, поддерживаются корпорацией Майкрософт и часто используют набор ресурсов для DSC. Пока модуль PSDscResources не будет обновлен для DSCv3, помните о следующих известных проблемах совместимости.

  • Не используйте ресурсы из модуля PSDesiredStateConfiguration , который поставляется с Windows. Вместо этого переключитесь на PSDscResources.
  • Не используйте WindowsFeatureресурсы и WindowsFeatureSetWindowsOptionalFeatureSet WindowsOptionalFeatureресурсы в PsDscResources. Существует известная проблема с загрузкой модуля DISM в PowerShell 7.1.3 в Windows Server, требующей обновления.

nx* Ресурсы для Linux, включенные в репозиторий DSC для Linux, были написаны в сочетании языков C и Python. Так как путь вперед для DSC в Linux — использовать PowerShell, существующие nx* ресурсы несовместимы с DSCv3. Пока не будет доступен новый модуль, содержащий поддерживаемые ресурсы для Linux, необходимо создавать пользовательские ресурсы.

Совместимость с DSC версии 3 и предыдущими версиями

DSC версии 3 в конфигурации компьютера могут работать вместе со старыми версиями, установленными в Windows и Linux. Эти реализации являются отдельными. Однако в версиях DSC нет обнаружения конфликтов, поэтому не пытайтесь управлять теми же параметрами.

Следующие шаги