Поделиться через


Частичные конфигурации требуемого состояния PowerShell

Область применения: Windows PowerShell 5.0 и более поздних версий.

В PowerShell 5.0 конфигурация требуемого состояния (DSC) позволяет доставлять конфигурации фрагментами и из нескольких источников. Локальный диспетчер конфигураций (LCM) на целевом узле объединяет фрагменты перед применением их в качестве единой конфигурации. Эта возможность позволяет совместно управлять конфигурацией между командами или отдельными пользователями. Например, если две или более групп разработчиков совместно работают над службой, каждая из них может захотеть создать конфигурации для управления своей частью службы. Каждая из этих конфигураций может быть извлечена с разных опрашивающих серверов, и они могут быть добавлены на разных этапах разработки. Частичные конфигурации также позволяют разным лицам или командам управлять различными аспектами настройки узлов без необходимости координировать редактирование одного документа конфигурации. Например, одна команда может отвечать за развертывание виртуальной машины и операционной системы, в то время как другая команда может развертывать на этой виртуальной машине другие приложения и службы. С помощью частичных конфигураций каждая команда может создать свою собственную конфигурацию, не усложняя ни одну из них.

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

Частичные конфигурации в режиме принудительной печати

Чтобы использовать частичные конфигурации в режиме принудительной отправки, необходимо настроить LCM на целевом узле для приема частичных конфигураций. Каждая частичная конфигурация должна быть отправлена в целевой объект с помощью Publish-DSCConfiguration командлета. Затем целевой узел объединяет частичную конфигурацию в одну конфигурацию, и вы можете применить конфигурацию, вызвав командлет Start-DscConfiguration .

Настройка LCM для частичных конфигураций в режиме push-уведомлений

Чтобы настроить LCM для частичных конфигураций в режиме принудительной отправки, необходимо создать конфигурацию DSCLocalConfigurationManager с одним блоком PartialConfiguration для каждой частичной конфигурации. Дополнительные сведения о настройке LCM см. в разделе Настройка локального диспетчера конфигураций в Windows. В следующем примере показана конфигурация LCM, которая ожидает две частичные конфигурации: одну для развертывания ОС, а другую для развертывания и настройки SharePoint.

[DSCLocalConfigurationManager()]
configuration PartialConfigDemo
{
    Node localhost
    {

        PartialConfiguration ServiceAccountConfig
        {
            Description = 'Configuration to add the SharePoint service account to the Administrators group.'
            RefreshMode = 'Push'
        }
           PartialConfiguration SharePointConfig
        {
            Description = 'Configuration for the SharePoint server'
            RefreshMode = 'Push'
        }
    }
}

PartialConfigDemo

Для параметра RefreshMode для каждой частичной конфигурации задано значение "Push". Имена блоков PartialConfiguration (в данном случае "ServiceAccountConfig" и "SharePointConfig") должны точно совпадать с именами конфигураций, которые передаются на целевой узел.

Замечание

Имя каждого блока PartialConfiguration должно совпадать с фактическим именем конфигурации, указанным в сценарии конфигурации, а не с именем MOF-файла, которое должно быть либо именем целевого узла, либо localhostименем .

Публикация и запуск частичных конфигураций в режиме push-уведомления

Затем вы вызываете Publish-DSCConfiguration для каждой конфигурации, передавая папки, содержащие документы конфигурации, в качестве параметров Path . Publish-DSCConfigurationразмещает конфигурационные файлы MOF на целевых узлах. После публикации обеих конфигураций можно обратиться Start-DSCConfiguration –UseExisting к целевому узлу.

Например, если на узле разработки скомпилированы следующие документы MOF конфигурации:

Get-ChildItem -Recurse
    Directory: C:\PartialConfigTest

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        8/11/2016   1:55 PM                ServiceAccountConfig
d-----       11/17/2016   4:14 PM                SharePointConfig

    Directory: C:\PartialConfigTest\ServiceAccountConfig

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/11/2016   2:02 PM           2034 TestVM.mof

    Directory: C:\PartialConfigTest\SharePointConfig

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       11/17/2016   4:14 PM           1930 TestVM.mof

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

Publish-DscConfiguration .\ServiceAccountConfig -ComputerName 'TestVM'
Publish-DscConfiguration .\SharePointConfig -ComputerName 'TestVM'
Start-DscConfiguration -UseExisting -ComputerName 'TestVM'
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
17     Job17           Configuratio... Running       True            TestVM            Start-DscConfiguration...

Замечание

Пользователь, выполняющий командлет Publish-DSCConfiguration, должен иметь права администратора на целевом узле.

Частичные конфигурации в режиме вытягивания

Частичные конфигурации могут быть получены с одного или нескольких опрашивающих серверов (дополнительные сведения о опрашивающих серверах см. в разделе Опрашивающие серверы конфигурации требуемого состояния Windows PowerShell). Для этого необходимо настроить LCM на целевом узле для извлечения частичных конфигураций, а также правильно назвать и найти документы по конфигурации на опрашивающих серверах.

Настройка LCM для конфигураций опрашивающих узлов

Чтобы настроить LCM на извлечение частичных конфигураций с опрашивающего сервера, опрашивающий сервер определяется либо в блоке ConfigurationRepositoryWeb (для опрашивающего сервера HTTP), либо в блоке ConfigurationRepositoryShare (для опрашивающего сервера SMB). Затем создаются блоки PartialConfiguration , которые ссылаются на опрашивающий сервер с помощью свойства ConfigurationSource . Кроме того, необходимо создать блок Settings , чтобы указать, что LCM использует режим извлечения, и указать ConfigurationNames или ConfigurationID , которые опрашивающий сервер и целевой узел используют для идентификации конфигураций. Следующая метаконфигурация определяет опрашивающий HTTP-сервер с именем CONTOSO-PullSrv и две частичные конфигурации, использующие этот опрашивающий сервер.

Дополнительные сведения о настройке LCM с помощью ConfigurationNames см. в разделе Настройка опрашивающего клиента с использованием имен конфигураций. Сведения о настройке LCM с помощью ConfigurationID см. в разделе Настройка опрашивающего клиента с использованием идентификатора конфигурации.

Настройка LCM для конфигураций режима извлечения с использованием имен конфигураций

[DscLocalConfigurationManager()]
Configuration PartialConfigDemoConfigNames
{
        Settings
        {
            RefreshFrequencyMins            = 30;
            RefreshMode                     = "PULL";
            ConfigurationMode               ="ApplyAndAutocorrect";
            AllowModuleOverwrite            = $true;
            RebootNodeIfNeeded              = $true;
            ConfigurationModeFrequencyMins  = 60;
        }
        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL                       = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'
            RegistrationKey                 = 5b41f4e6-5e6d-45f5-8102-f2227468ef38
            ConfigurationNames              = @("ServiceAccountConfig", "SharePointConfig")
        }

        PartialConfiguration ServiceAccountConfig
        {
            Description                     = "ServiceAccountConfig"
            ConfigurationSource             = @("[ConfigurationRepositoryWeb]CONTOSO-PullSrv")
        }

        PartialConfiguration SharePointConfig
        {
            Description                     = "SharePointConfig"
            ConfigurationSource             = @("[ConfigurationRepositoryWeb]CONTOSO-PullSrv")
            DependsOn                       = '[PartialConfiguration]ServiceAccountConfig'
        }
}

Настройка LCM для конфигураций режима вытягивания с помощью ConfigurationID

[DSCLocalConfigurationManager()]
configuration PartialConfigDemoConfigID
{
    Node localhost
    {
        Settings
        {
            RefreshMode                     = 'Pull'
            ConfigurationID                 = '1d545e3b-60c3-47a0-bf65-5afc05182fd0'
            RefreshFrequencyMins            = 30
            RebootNodeIfNeeded              = $true
        }
        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL                       = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'

        }

           PartialConfiguration ServiceAccountConfig
        {
            Description                     = 'Configuration for the Base OS'
            ConfigurationSource             = '[ConfigurationRepositoryWeb]CONTOSO-PullSrv'
            RefreshMode                     = 'Pull'
        }
           PartialConfiguration SharePointConfig
        {
            Description                     = 'Configuration for the Sharepoint Server'
            ConfigurationSource             = '[ConfigurationRepositoryWeb]CONTOSO-PullSrv'
            DependsOn                       = '[PartialConfiguration]ServiceAccountConfig'
            RefreshMode                     = 'Pull'
        }
    }
}
PartialConfigDemo

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

После создания метаконфигурации необходимо запустить ее для создания документа конфигурации (MOF-файла), а затем вызвать Set-DscLocalConfigurationManager для настройки LCM.

Именование и размещение конфигурационных документов на опрашивающем сервере (ConfigurationNames)

Документы частичной конфигурации должны быть помещены в папку, указанную как ConfigurationPath в файле web.config для опрашивающего сервера (обычно C:\Program Files\WindowsPowerShell\DscService\Configuration).

Именование конфигурационных документов на опрашивающем сервере в PowerShell 5.1

Если вы извлекаете только одну частичную конфигурацию с отдельного опрашивающего сервера, документ конфигурации может иметь любое имя. Если вы извлекаете более одной частичной конфигурации с опрашивающего сервера, документ конфигурации может быть назван либо <ConfigurationName>.mof, где ConfigurationName — это имя частичной конфигурации, либо <ConfigurationName>.<NodeName>.mof, где ConfigurationName — это имя частичной конфигурации, а NodeName — имя целевого узла. Это позволяет извлекать конфигурации с опрашивающего сервера DSC службы автоматизации Azure.

Именование конфигурационных документов на опрашивающем сервере в PowerShell 5.0

Документы конфигурации должны быть названы следующим образом: ConfigurationName.mof, где ConfigurationName — это имя частичной конфигурации. В нашем примере конфигурационные документы должны быть названы следующим образом:

ServiceAccountConfig.mof
ServiceAccountConfig.mof.checksum
SharePointConfig.mof
SharePointConfig.mof.checksum

Именование и размещение конфигурационных документов на опрашивающем сервере (ConfigurationID)

Документы частичной конфигурации должны быть помещены в папку, указанную как ConfigurationPath в файле web.config для опрашивающего сервера (обычно C:\Program Files\WindowsPowerShell\DscService\Configuration). Документы конфигурации должны быть названы следующим образом: , где ConfigurationName — это имя частичной конфигурации, а ConfigurationID — это идентификатор конфигурации, <ConfigurationName>.<ConfigurationID>.mofопределенный в LCM на целевом узле. В нашем примере конфигурационные документы должны быть названы следующим образом:

ServiceAccountConfig.1d545e3b-60c3-47a0-bf65-5afc05182fd0.mof
ServiceAccountConfig.1d545e3b-60c3-47a0-bf65-5afc05182fd0.mof.checksum
SharePointConfig.1d545e3b-60c3-47a0-bf65-5afc05182fd0.mof
SharePointConfig.1d545e3b-60c3-47a0-bf65-5afc05182fd0.mof.checksum

Запуск частичных конфигураций с опрашивающего сервера

После того как LCM на целевом узле будет настроена, а документы конфигурации будут созданы и правильно названы на опрашивающем сервере, целевой узел будет извлекать частичные конфигурации, объединять их и применять полученную конфигурацию через равные промежутки времени, как указано в свойстве RefreshFrequencyMins LCM. Если вы хотите выполнить принудительное обновление, можно вызвать командлет Update-DscConfiguration , чтобы извлечь конфигурации и применить их.

Частичные конфигурации в смешанных режимах push и pull

Вы также можете комбинировать режимы push и pull для частичных конфигураций. То есть, у вас может быть одна частичная конфигурация, которая извлекается с опрашивающего сервера, в то время как другая частичная конфигурация отправляется. Укажите режим обновления для каждой частичной конфигурации, как описано в предыдущих разделах. Например, следующая метаконфигурация описывает тот же пример, с частичной конфигурацией в режиме извлечения ServiceAccountConfig и частичной SharePointConfig конфигурацией в режиме отправки.

Смешанные режимы отправки и извлечения с помощью ConfigurationNames

[DscLocalConfigurationManager()]
Configuration PartialConfigDemoConfigNames
{
        Settings
        {
            RefreshFrequencyMins            = 30;
            RefreshMode                     = "PULL";
            ConfigurationMode               = "ApplyAndAutocorrect";
            AllowModuleOverwrite            = $true;
            RebootNodeIfNeeded              = $true;
            ConfigurationModeFrequencyMins  = 60;
        }
        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL                       = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'
            RegistrationKey                 = 5b41f4e6-5e6d-45f5-8102-f2227468ef38
            ConfigurationNames              = @("ServiceAccountConfig", "SharePointConfig")
        }

        PartialConfiguration ServiceAccountConfig
        {
            Description                     = "ServiceAccountConfig"
            ConfigurationSource             = @("[ConfigurationRepositoryWeb]CONTOSO-PullSrv")
            RefreshMode                     = 'Pull'
        }

        PartialConfiguration SharePointConfig
        {
            Description                     = "SharePointConfig"
            DependsOn                       = '[PartialConfiguration]ServiceAccountConfig'
            RefreshMode                     = 'Push'
        }

}

Смешанные режимы отправки и извлечения с помощью ConfigurationID

[DSCLocalConfigurationManager()]
configuration PartialConfigDemo
{
    Node localhost
    {
        Settings
        {
            RefreshMode             = 'Pull'
            ConfigurationID         = '1d545e3b-60c3-47a0-bf65-5afc05182fd0'
            RefreshFrequencyMins    = 30
            RebootNodeIfNeeded      = $true
        }
        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL               = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'

        }

           PartialConfiguration ServiceAccountConfig
        {
            Description             = 'Configuration for the Base OS'
            ConfigurationSource     = '[ConfigurationRepositoryWeb]CONTOSO-PullSrv'
            RefreshMode             = 'Pull'
        }
           PartialConfiguration SharePointConfig
        {
            Description             = 'Configuration for the Sharepoint Server'
            DependsOn               = '[PartialConfiguration]ServiceAccountConfig'
            RefreshMode             = 'Push'
        }
    }
}
PartialConfigDemo

Обратите внимание, что в блоке настроек указан режим RefreshMode — "Pull", а для частичной SharePointConfig конфигурации - режим RefreshMode - "Push".

Присвойте имя и найдите файлы MOF конфигурации, как описано выше, для соответствующих режимов обновления. Вызовите Publish-DSCConfiguration команду для публикации частичной SharePointConfig конфигурации и либо дождитесь извлечения ServiceAccountConfig конфигурации с опрашивающего сервера, либо выполните принудительное обновление, вызвав Update-DscConfiguration.

Пример частичной конфигурации ServiceAccountConfig

Configuration ServiceAccountConfig
{
    Param (
        [Parameter(Mandatory,
                   HelpMessage="Domain credentials required to add domain\sharepoint_svc to the local Administrators group.")]
        [ValidateNotNullOrEmpty()]
        [pscredential]$Credential
    )

    Import-DscResource -ModuleName PSDesiredStateConfiguration

    Node localhost
    {
        Group LocalAdmins
        {
            GroupName           = 'Administrators'
            MembersToInclude    = 'domain\sharepoint_svc',
                                  '[email protected]'
            Ensure              = 'Present'
            Credential          = $Credential
        }

        WindowsFeature Telnet
        {
            Name                = 'Telnet-Server'
            Ensure              = 'Absent'
        }
    }
}
ServiceAccountConfig

Пример частичной конфигурации SharePointConfig

Configuration SharePointConfig
{
    Param (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [pscredential]$ProductKey
    )

    Import-DscResource -ModuleName xSharePoint

    Node localhost
    {
        xSPInstall SharePointDefault
        {
            Ensure      = 'Present'
            BinaryDir   = '\\FileServer\Installers\Sharepoint\'
            ProductKey  = $ProductKey
        }
    }
}
SharePointConfig

См. также

Опрашивающие серверы конфигурации требуемого состояния Windows PowerShell

Windows Настройка локального диспетчера конфигураций