PowerShell 預期狀態設定部分設定

適用於︰Windows PowerShell 5.0 及更新版本。

在 PowerShell 5.0 中,預期狀態設定 (DSC) 可讓設定以片段形式和從多個來源傳送。 目標節點上本機設定管理員 (LCM) 先將片段放在一起,再當成單一設定套用。 這項功能可讓團隊或個人之間共用設定控制權。 例如,如果兩個或多個開發人員小組在一項服務共同作業,便有可能每個人都想要建立設定來管理服務的一部分。 每一種設定可能提取自不同提取伺服器,因此無法將它們加入開發的不同階段。 部分設定也可讓不同的個人或小組控制設定節點的不同層面,而不需要協調單一設定文件的編輯。 例如,一個小組可能會負責部署 VM 和作業系統,而另一個小組負責在該 VM 上部署其他應用程式和服務。 藉由部分設定,每個小組都可以建立自己的設定,而不會讓任一組的設定不必要地複雜。

您可以藉由推送模式、提取模式或兩者組合來使用部分設定。

推送模式中的部分設定

若要在推送模式下使用部分設定,您可以設定目標節點上的 LCM 接收部分設定。 每個部分設定都必須使用 Publish-DSCConfiguration Cmdlet 推送至目標。 目標節點接著將部分設定結合至單一設定中,您也可以呼叫 Start-DscConfiguration Cmdlet 來套用設定。

設定推送模式部分設定的 LCM

若要設定推送模式中部分設定的 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 區塊的名稱都必須符合設定在設定指令碼中指定的實際名稱,而不是應為目標節點或 localhost 名稱的 MOF 檔案名稱。

發佈和啟動推送模式部分設定

然後您可對每個設定呼叫 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 Cmdlet 的使用者必須在目標節點上具備系統管理員權限。

提取模式中的部分設定

部分設定可從一或多個提取伺服器提取 (如需提取伺服器的詳細資訊,請參閱 Windows PowerShell 期望狀態設定提取伺服器)。 若要這樣做,您必須在目標節點上設定 LCM,以提取部分設定,並在提取伺服器上適當地命名和放置設定文件。

設定提取節點設定 LCM

若要設定 LCM 從提取伺服器提取部分設定,您必須在 ConfigurationRepositoryWeb (適用於 HTTP 提取伺服器) 或 ConfigurationRepositoryShare (適用於 SMB 提取伺服器) 區塊定義提取伺服器。 接著建立 PartialConfiguration 區塊,該區塊可使用 ConfigurationSource 屬性參考提取伺服器。 您也需要建立 Settings 區塊以指定 LCM 使用提取模式,並指定提取伺服器與目標節點用來識別設定的 ConfigurationNamesConfigurationID。 下列中繼設定會定義名為 CONTOSO-PullSrv 的 HTTP 提取伺服器,和使用該提取伺服器的兩個部分設定。

如需使用 ConfigurationNames 設定 LCM 的詳細資訊,請參閱使用設定名稱設定提取用戶端。 如需使用 ConfigurationID 設定 LCM 的相關資訊,請參閱使用設定識別碼設定提取用戶端

使用設定名稱設定提取節點設定的 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'
        }
}

使用 ConfigurationID 設定提取節點設定的 LCM

[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)

部分設定文件必須位於提取伺服器的 web.config 檔案 (通常為 C:\Program Files\WindowsPowerShell\DscService\Configuration) 內指定為 ConfigurationPath 的資料夾中。

PowerShell 5.1 中命名提取伺服器上的命名設定文件

如果您僅從個別提取伺服器提取單一部分設定,設定文件可以使用任何名稱。 如果您從提取伺服器提取多個部分設定,設定文件可以命名為 <ConfigurationName>.mof (其中 ConfigurationName 是部分設定的名稱) 或是 <ConfigurationName>.<NodeName>.mof (其中 ConfigurationName 是部分設定的名稱,而 NodeName 是目標節點的名稱)。 這可讓您從 Azure 自動化 DSC 提取伺服器提取設定。

PowerShell 5.0 中命名提取伺服器上的命名設定文件

設定文件必須命名如下:ConfigurationName.mof,其中 ConfigurationName 是部分設定的名稱。 在此範例中,設定文件應該命名如下:

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

在提取伺服器上放置設定文件並為其命名 (ConfigurationID)

部分設定文件必須位於提取伺服器的 web.config 檔案 (通常為 C:\Program Files\WindowsPowerShell\DscService\Configuration) 內指定為 ConfigurationPath 的資料夾中。 設定文件必須命名如下:<ConfigurationName>.<ConfigurationID>.mof,其中 ConfigurationName 是部分設定的名稱,而 ConfigurationID 是目標節點上 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 後,並已在提取伺服器上建立設定文件並正確加以命名後,目標節點將會提取部分設定、結合部分設定,並依據 LCM 屬性 RefreshFrequencyMins 所指定的固定間隔套用所產生的設定。 如果您想要強制重新整理,您可以呼叫 Update-DscConfiguration Cmdlet 來提取設定並加以套用。

混合推送和提取模式中的部分設定

您也可以混和部分設定的推送和提取模式。 也就是說,推送另一個部分設定時,您可能會有一個從提取伺服器提取的部分設定。 指定每個部分設定的重新整理模式,如同先前小節中所述。 例如,下列中繼設定描述相同的範例,其中 ServiceAccountConfig 部分設定處於 Pull 模式,而 SharePointConfig 部分設定則處於 Push 模式。

使用 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

請注意,在 Settings 區塊中指定的 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',
                                  'admins@example.domain'
            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 設定本機設定管理員