适用于: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. 但是,您可以定义任意数量的其他键,并将它们命名为任何您想要的名称。
有关使用非节点数据的示例,请参阅分离 配置和环境数据。