如何在节点名称中使用“*”

How to use "*" in nodeName

假设我在我的 DSC 设置中有 2 个角色,我的设置中有可变数量的节点:

$configdata = @{
    AllNodes = @(
        @{
            NodeName = "*Web*" # < problem lies here
                      # can be prodWeb## or devWeb##
            Role = "IIS", "basic"
        }
        @{
            NodeName = "*"
            Role = "basic"
        }
    )
}

DSC 资源:

Configuration CFG
{   
    $AllNodes.where{ $_.Role.Contains("Basic") }.NodeName 
    {
    ...
    }

    $AllNodes.where{ $_.Role.Contains("IIS") }.NodeName 
    {
    ...
    }
}

我能做到吗?

配置数据中的 AllNodes 条目是哈希表数组。每个哈希表都需要有一个键 NodeName。当表达式计算时,该值将被替换。所以像 web* 这样的节点名将不起作用

所以,基本上我所做的是:

Configuration Windows
{   
    node $allnodes.NodeName {
        switch ($Node.Role) {
            "Role1" {
                ...
            }
            "Role2" {
                ...
            }
            "Role3" {
                ...
            }
        }
    }
}

我的配置数据:

@{ AllNodes = @( @{ NodeName = "web"; Role = "Role1", "Role2" } ) }

对于另一组节点:

@{ AllNodes = @( @{ NodeName = "other"; Role = "Role1", "Role3" } ) }

我正在使用 Azure Automation 将配置分配给节点,因此它不会检查节点名称,它只会应用配置在编译时具有的任何角色。