使用 DSC 中的設定資料

適用於:Windows PowerShell 4.0、Windows PowerShell 5.0

您可以使用內建的 DSC ConfigurationData 參數,定義可用於設定中的資料。 這可讓您建立可用於多個節點或不同環境的單一設定。 例如,如果您要開發應用程式,您可以針對開發和生產環境使用一個設定,並使用設定資料來指定每個環境的資料。

本主題將說明 ConfigurationData 雜湊表的結構。 如需如何使用設定資料的範例,請參閱分離設定和環境資料

ConfigurationData 一般參數

DSC 設定採用 ConfigurationData 一般參數,這是編譯設定時所指定的參數。 如需編譯設定的詳細資訊,請參閱 DSC 設定

ConfigurationData 參數是至少必須有一個名為 AllNodes 之索引鍵的雜湊表。 它也可以包含一或多個其他索引鍵。

注意

本主題中的範例使用名為 NonNodeData 的單一額外索引鍵 (而不是具名 AllNodes 索引鍵),但是您可以包含任意數目的額外索引鍵,並將它們任意命名。

$MyData =
@{
    AllNodes = @()
    NonNodeData = ""
}

AllNodes 索引鍵的值是陣列。 此陣列的每個元素也是至少必須有一個名為 NodeName 之索引鍵的雜湊表:

$MyData =
@{
    AllNodes =
    @(
        @{
            NodeName = "VM-1"
        },


        @{
            NodeName = "VM-2"
        },


        @{
            NodeName = "VM-3"
        }
    );

    NonNodeData = ""
}

您也可以將其他索引鍵新增至每個雜湊表:

$MyData =
@{
    AllNodes =
    @(
        @{
            NodeName = "VM-1"
            Role     = "WebServer"
        },


        @{
            NodeName = "VM-2"
            Role     = "SQLServer"
        },


        @{
            NodeName = "VM-3"
            Role     = "WebServer"
        }
    );

    NonNodeData = ""
}

若要將屬性套用至所有節點,您可以建立 AllNodes 陣列的成員,其 NodeName*。 例如,您可以如下為每個節點提供 LogPath 屬性:

$MyData =
@{
    AllNodes =
    @(
        @{
            NodeName     = "*"
            LogPath      = "C:\Logs"
        },


        @{
            NodeName     = "VM-1"
            Role         = "WebServer"
            SiteContents = "C:\Site1"
            SiteName     = "Website1"
        },


        @{
            NodeName     = "VM-2"
            Role         = "SQLServer"
        },


        @{
            NodeName     = "VM-3"
            Role         = "WebServer"
            SiteContents = "C:\Site2"
            SiteName     = "Website3"
        }
    );
}

這相當於將名稱為 LogPath 且值為 "C:\Logs" 的屬性新增至每個其他區塊 (VM-1VM-2VM-3)。

定義 ConfigurationData 雜湊表

您可以將 ConfigurationData 定義為與設定位於相同指令碼檔內的變數 (如上述範例),或個別 .psd1 檔案中的變數。 若要在 .psd1 檔案中定義 ConfigurationData,請建立只包含代表設定資料之雜湊表的檔案。

例如,您可以建立具有下列內容的檔案,並命名為 MyData.psd1

@{
    AllNodes =
    @(
        @{
            NodeName    = 'VM-1'
            FeatureName = 'Web-Server'
        },

        @{
            NodeName    = 'VM-2'
            FeatureName = 'Hyper-V'
        }
    )
}

編譯具有設定資料的設定

若要編譯您已為其定義設定資料的設定,請將設定資料當作 ConfigurationData 參數的值來傳遞。

這會為 AllNodes 陣列中的每個項目建立一個 MOF 檔案。 每個 MOF 檔案都會以對應之陣列項目的 NodeName 屬性來命名。

例如,如果您依上述 MyData.psd1 檔案中的方式定義設定資料,則編譯設定將會同時建立 VM-1.mofVM-2.mof 檔案。

使用變數來編譯具有設定資料的設定

若要使用定義為與設定位於相同 .ps1 檔案中之變數的設定資料,請在編譯設定時,將該變數名稱當作 ConfigurationData 參數的值來傳遞:

MyDscConfiguration -ConfigurationData $MyData

使用資料檔來編譯具有設定資料的設定

若要使用在 .psd1 檔案中定義的設定資料,您可以在編譯設定時,傳遞該檔案的路徑和名稱作為 ConfigurationData 參數值:

MyDscConfiguration -ConfigurationData .\MyData.psd1

在設定中使用 ConfigurationData 變數

DSC 提供下列特殊變數,可用於設定指令碼中︰

  • $AllNodes 代表 ConfigurationData 中所定義的整個節點集合。 您可以使用 .Where().ForEach() 篩選 AllNodes 集合。
  • ConfigurationData 代表編譯設定時,當做參數傳遞的整個雜湊表。
  • MyTypeName 包含變數所用的設定名稱。 例如,在設定 MyDscConfiguration 中,$MyTypeName 的值為 MyDscConfiguration
  • Node 代表 AllNodes 集合使用 .Where().ForEach() 篩選後所包含的特定項目。

使用非節點資料

如我們在先前的範例中所見,ConfigurationData 雜湊表除了必要的 AllNodes 索引鍵之外,還可以有一或多個索引鍵。 在本主題的範例中,我們只使用了單一額外節點,並將它命名為 NonNodeData。 不過,您可以定義任何數目的額外索引鍵,並將它們任意命名。

如需有關使用非節點資料的範例,請參閱分離設定和環境資料

另請參閱