DSC 設定

適用於:Windows PowerShell 4.0、Windows PowerShell 5.0

DSC 設定是一種定義特殊類型函式的 PowerShell 指令碼。 若要定義設定,請使用 PowerShell 關鍵字 Configuration

Configuration MyDscConfiguration {
    Node "TEST-PC1" {
        WindowsFeature MyFeatureInstance {
            Ensure = 'Present'
            Name = 'RSAT'
        }
        WindowsFeature My2ndFeatureInstance {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}
MyDscConfiguration

將指令碼儲存為 .ps1 檔案。

設定語法

設定指令碼包含下列項目:

  • Configuration 區塊。 這是最外層的指令碼區塊。 定義它的方式,是使用 Configuration 關鍵字並提供名稱。 在這裡情況下,組態的名稱是 MyDscConfiguration
  • 一個或多個 Node 區塊。 它們會定義您要設定的節點 (電腦或 VM)。 在上述組態中,有一個 名為 TEST-PC1的計算機為目標的 Node 區塊。 Node 區塊可以接受多部計算機名稱。
  • 一個或多個資源區塊。 設定就在這裡為它要設定的資源設定屬性。 在此情況下,有兩個資源區塊,每個區塊都會呼叫 WindowsFeature 資源。

注意

WindowsFeature DSC 資源僅適用於 Windows Server 計算機。 對於具有用戶端 OS 的電腦,例如 Windows 11,您必須改用 WindowsOptionalFeature。 For more information, see the "WindowsOptionalFeature" section of the PSDscResources documentation.

只要可以在 PowerShell 函式中執行的作業,通常在 [設定] 區塊內都可以執行。 在上述範例中,如果您不想在組態中硬式編碼目標計算機的名稱,您可以新增節點名稱的參數。

在本範例中,您在編譯設定時將節點名稱當作 ComputerName 參數來傳遞,藉以指定節點名稱。 名稱預設為 localhost

Configuration MyDscConfiguration
{
    param
    (
        [string[]]$ComputerName='localhost'
    )

    Node $ComputerName
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

節點區塊也可以接受多個電腦名稱。 在上述範例中,您可以使用 -ComputerName 參數,也可以將逗號分隔的電腦清單直接傳遞給節點區塊。

MyDscConfiguration -ComputerName "localhost", "Server01"

將計算機清單指定至 Node 區塊時,您必須使用數位表示法。

Configuration MyDscConfiguration
{
    Node @('localhost', 'Server01')
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

編譯設定

您必須先將設定編譯成 MOF 文件,才能施行設定。 呼叫設定即可完成此作業,就像您呼叫 PowerShell 函式一樣。 範例的最後一行僅包含設定名稱,並會呼叫設定。

注意

若要呼叫設定,函式必須在全域範圍內 (像任何其他 PowerShell 函式一樣)。 執行此作業的方法有二:「點執行」指令碼,或使用 F5 或按一下 ISE 的 [執行指令碼] 按鈕執行設定指令碼。 若要點執行指令碼,請執行命令 . .\myConfig.ps1,其中 myConfig.ps1 是包含設定的指令碼檔案名稱。

當您呼叫設定時,它會:

  • 解析所有的變數
  • 在目前的目錄中建立和設定同名的資料夾。
  • 在新的目錄中建立名為 NodeName.mof 的檔案,其中 NodeName 是設定的目標節點名稱。 如果有多個節點,每個節點都會建立一個 MOF 檔案。

注意

MOF 檔案包含目標節點的所有設定資訊。 因為這樣,這個檔案的安全防護很重要。 如需詳細資訊,請參閱保護 MOF 檔案

編譯上述第一個設定會導致下列的資料夾結構:

. .\MyDscConfiguration.ps1
MyDscConfiguration
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/23/2015   4:32 PM           2842 localhost.mof

如果設定使用參數,如同第二個範例,則必須在編譯時提供參數。 它看起來會像這樣:

. .\MyDscConfiguration.ps1
MyDscConfiguration -ComputerName 'MyTestNode'
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/23/2015   4:32 PM           2842 MyTestNode.mof

在設定中使用新的資源

如果執行了前面的範例,您可能會注意到,系統警告使用了未明確匯入的資源。 現在,DSC 在 PSDesiredStateConfiguration 模組中附有 12 種資源。

Cmdlet Get-DscResource 可用於決定在系統上安裝並供 LCM 使用的資源。 這些模組放置在 $env:PSModulePath 並由 Get-DscResource 正確辨識後,仍需要載入至設定中。

Import-DscResource 是只能在設定區塊中辨識的動態關鍵字,它不是 Cmdlet。 Import-DscResource 支援兩個參數:

  • ModuleName,使用 Import-DscResource 時建議用它。 它接受包含了要匯入資源 (以及模組名稱字串陣列) 的模組名稱。
  • Name 是要匯入的資源名稱。 Get-DscResource 傳回的 "Name" 不是易記的名稱,而是定義資源結構描述時使用的類別名稱 (Get-DscResource 傳回 ResourceType)。

如需使用 Import-DSCResource 的詳細資訊,請參閱使用 Import-DSCResource

PowerShell v4 和 v5 的差異

在 PowerShell 4.0 中需要儲存 DSC 資源的位置存在差異。 如需詳細資訊,請參閱資源位置

另請參閱