在 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-1、 和 VM-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.mof 创建 和 VM-2.mof 文件。

使用变量编译包含配置数据的配置

要使用与配置在同一文件中 .ps1 定义为变量的配置数据,请在编译配置时将变量名称作为 ConfigurationData 参数的值传递:

MyDscConfiguration -ConfigurationData $MyData

使用数据文件编译包含配置数据的配置

若要使用 .psd1 文件中定义的配置数据,请在编译配置时将该文件的路径和名称作为 ConfigurationData 参数的值传递:

MyDscConfiguration -ConfigurationData .\MyData.psd1

在配置中使用 ConfigurationData 变量

DSC 提供了以下可在配置脚本中使用的特殊变量:

  • $AllNodes 是指 ConfigurationData 中定义的节点的整个集合。 可以使用 筛选 AllNodes 集合。 Where().ForEach()
  • ConfigurationData 是指编译配置时作为参数传递的整个哈希表。
  • MyTypeName 包含使用变量的 配置 名称。 例如,在配置MyDscConfiguration中,的值$MyTypeNameMyDscConfiguration为 。
  • Node 引用 AllNodes 集合中的特定条目,然后使用 进行筛选。Where().ForEach()
    • 您可以在about_arrays中阅读有关这些方法的更多信息

使用非节点数据

正如我们在前面的示例中看到的,除了所需的 AllNodes 键之外,ConfigurationData 哈希表还可以有一个或多个键。 在本主题的示例中,我们只使用了一个附加节点,并将其命名为 NonNodeData. 但是,您可以定义任意数量的其他键,并将它们命名为任何您想要的名称。

有关使用非节点数据的示例,请参阅分离 配置和环境数据

另请参阅