2017-06-12 23 views
0

想知道什麼是最好的方式來獲得DSC資源內的一些邏輯,而不訴諸編寫自定義DSC資源。示例如下。 我需要提供content參數內置DSC資源File。我不能把Configuration裏的Function函數返回那個值,似乎也不能在Content標記裏面放置邏輯。對於這種情況,有什麼可能的辦法。DSC資源內部可能有複雜的邏輯嗎?

``` $文件路徑=加入路徑-Path 「$($ ENV:programdata)」 -ChildPath 「泊塢窗\ CONFIG \ 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

如果您需要將邏輯作爲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配置。