DSC资源中是否有可能有复杂的逻辑?

时间:2017-06-12 20:26:57

标签: dsc

想知道在DSC资源中使用某些逻辑的最佳方法是什么,而无需编写自定义DSC资源。示例如下。 我需要为内置DSC资源content提供File参数。我不能将Function放在Configuration中以返回该值,并且似乎也无法将逻辑放在Content标记内。对于这种情况可能有什么办法。

```            $ filePath = Join-path -Path“$($ env:programdata)” - -ChildPath             “搬运工\设置\ daemon.json”

      $filePath = Join-path -Path  `"$($env:programdata)`" -ChildPath "docker\config\daemon.json`"
    if (test-Path ($filePath))
    {) {   $jsonConfig = get-content $filePath | convertfrom-json
        $jsonConfig.graph = $graphLocation
        $jsonConfig | convertto-json 
    }
    else {   @{ graphLocation = "$graphLocation"} | convertto-json 
    }

```

1 个答案:

答案 0 :(得分:1)

如果您需要逻辑作为DSC作业的一部分运行,那么您将需要求助于构建自定义DSC资源。请记住,所有DSC代码都将编译为MOF文件,并且MOF文件无法运行任意PowerShell代码。因此,在工作期间将无法使用内联函数。

但是,您可以拥有在编译阶段运行的逻辑。例如,计算将分配给DSC资源属性的属性值。

Configuration最终只是一个以名称和脚本块作为参数的函数,并且在PowerShell中定义嵌套函数是有效的,尽管它必须在使用之前在函数范围内定义。

Configuration MyConfig {

  function ComplexLogic() {
    "It works!"
  }

  Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
  Node localhost {
    Log Example {
      Message = ComplexLogic
    }
  }
}

您还可以运行一个计算值的普通PowerShell脚本,然后将这些值作为参数传递给DSC配置。