"格式化字符串"时出错在PowerShell DSC

时间:2017-01-31 08:40:11

标签: arrays string powershell foreach dsc

我尝试使用PowerShell DSC在RavenDB中设置复制,但是当我尝试编译配置时,我在TestScript scriptblock中收到此错误:

  

PSDesiredStateConfiguration \ Node:格式化字符串时出错:输入字符串的格式不正确。

这是我的scriptblock:

TestScript = {
    $result = Invoke-WebRequest -Method GET "http://localhost:8080/Databases/Test/Docs/Raven/Replication/Destinations" -UseBasicParsing

    $ravenSlaves = "{0}".Split(",")

    foreach($ravenSlave in $ravenSlaves)
    {
        if($result -notmatch $ravenSlave)
        {
            return $false
        }
    }

    return $true
} -f ($Node.RavenSlaves)

RavenSlaves的定义就像我的ConfigurationData中的字符串一样,用于这样的节点:

@{
    NodeName = "localhost"
    WebApplication   =   "test"            
    Role = "Master server"
    RavenSlaves = "server1,server2"
}

当我使用foreach迭代$ravenSlaves变量时,问题似乎与此有关,因为如果删除foreach(和{{1}在if内部,配置编译并创建mof文件。

1 个答案:

答案 0 :(得分:0)

Kiran通过他关于在配置中使用$using修饰符的评论让我找到了正确的解决方案。

我将节点上的RavenSlaves属性编辑为如下数组:

@{
   NodeName = "localhost"
   WebApplication   =   "test"            
   Role = "Master server"
   RavenSlaves = @("server1,server2")
}

然后我将TestScript - 块更改为:

TestScript = {
    $result = Invoke-WebRequest -Method GET "http://localhost:8080/Databases/Test/Docs/Raven/Replication/Destinations" -UseBasicParsing

    $ravenSlaves = $Node.RavenSlaves

    foreach($ravenSlave in $using:ravenSlaves)
    {
        if($result -notmatch $ravenSlave)
        {
            return $false
        }
    }  

    return $true

}

在服务器上编译和运行的脚本以及RavenDB中的复制文档是正确的。