共用方式為


命令型 DSC 資源的結構

DSC 資源提供標準化介面來管理系統的設定。 資源會定義您可以管理的屬性,並實作取得資源實例所需的程序代碼。

以命令為基礎的 DSC 資源會以至少兩個檔案定義:

  1. DSC 資源指令清單,告知 DSC 如何與資源互動。
  2. 一或多個可執行檔及其相依性來管理資源的實例。

DSC 資源指令清單

DSC 資源指令清單會定義為 JSON 檔案。 若要讓 DSC 將 JSON 檔案辨識為指令清單,檔案必須符合下列準則:

  1. 檔案必須可在環境變數中 PATH 探索。
  2. 檔案名的結尾 .dsc.resource.json必須是 。

當 DSC 搜尋本機系統是否有可用的命令型 DSC 資源時,它會在 中 PATH 搜尋使用 DSC 資源指令清單命名慣例之檔案的每個資料夾。 DSC 接著會剖析每個探索到的檔案,並針對 DSC 資源指令清單 JSON 架構加以驗證。

如果 JSON 檔案根據架構進行驗證,DSC 可以使用 DSC 資源。

指令清單至少必須定義:

  • 其相容的 DSC 資源指令清單 JSON 架構版本。
  • 資源的完整名稱,例如 Microsoft.Windows/Registry。 完整名稱語法為 <owner>[.<group>][.<area>]/<name>。 完整名稱的群組和區域元件可讓您將資源組織成命名空間。
  • DSC 如何呼叫 命令,以取得資源實例的目前狀態。
  • 驗證實例的方法。 這可以是下列項目之一:
    • 描述實例的 JSON 架構
    • DSC 必須呼叫 命令,才能在運行時間取得架構
    • 用來驗證巢狀 DSC 資源的命令。 最後一個選項僅適用於 DSC 群組資源和 DSC 提供者資源。

指令清單可以選擇性地定義:

  • DSC 如何呼叫 命令,以測試實例是否處於所需狀態。
  • DSC 如何呼叫 命令,將實例設定為所需的狀態。
  • 命令所傳回的非零結束代碼意義。
  • 當資源是 DSC 群組資源或 DSC 提供者資源時,DSC 如何呼叫 命令來管理其他 DSC 資源。
  • 關於資源的元數據,例如其作者和簡短描述。

如果指令清單未定義如何測試資源的實例,DSC 會針對資源實例執行綜合測試。 DSC 的綜合測試一律會取得實例的實際狀態,並且對實例屬性與所需狀態進行嚴格區分大小寫的比較。 綜合測試會忽略前面加上底線 () _ 或貨幣符號 $ () 的任何屬性。 如果任何屬性與定義的所需狀態不完全相同,DSC 會將實例回報為不符合規範。

如果指令清單未定義如何設定 DSC 資源的實例,DSC 就無法使用資源來強制執行所需的狀態。

指令清單不需要為每個作業指定相同的可執行檔。 每個作業的定義都是獨立的。

DSC 資源可執行檔

以命令為基礎的 DSC 資源一律需要可執行檔,才能執行 DSC。 DSC 資源指令清單不需要與可執行文件組合。 可執行檔可以是任何可執行檔,例如二進位應用程式或殼層腳本。 資源可能會針對不同的作業使用不同的可執行檔。

若要讓 DSC 使用可執行文件,必須在環境變數中 PATH 加以探索。 DSC 會針對每個作業呼叫可執行檔一次,並使用可執行檔傳回的結束代碼來判斷命令是否成功。 DSC 會將結束代碼 0 視為成功,並將所有其他結束代碼視為錯誤。

輸入

DSC 會將輸入傳送至命令型 DSC 資源,做為 stdin 上的 JSON 數據 Blob,或做為一組自變數旗標和值。 輸入處理是在 DSC 資源指令清單中為每個作業定義。

當 DSC 透過 stdin 以 JSON 形式傳送輸入時,數據 Blob 是實例所需狀態的 JSON 表示法。 這是資源最健全的選項,因為它可讓資源支援具有巢狀物件的複雜屬性。

當 DSC 將輸入當做自變數傳送時,它會為每個指定的屬性產生一對自變數。 第一個自變數是前面加上 --的屬性名稱,例如 --duration。 第二個自變數是 屬性的值。 不保證自變數組的順序。 這個輸入法不支援複雜的屬性。

輸出

命令型 DSC 資源的可執行文件必須在 DSC 呼叫時,將 JSON 數據傳回 stdout。 輸出編碼必須是UTF-8。 當資源傳回實例的狀態時,DSC 會根據資源的實例架構來驗證 JSON 數據。

針對 DSC 提供者資源,DSC 預期可執行檔會傳遞其管理為單一 JSON 陣列或一系列 JSON 行之資源的實例狀態。

以命令為基礎的 DSC 資源可以將記錄資訊發出至 stderr,以向 DSC 報告記錄資訊。 每個記錄項目都必須是包含兩個索引鍵的 JSON 物件:

  1. 索引 message 鍵會定義記錄項目的人類可讀取字串。
  2. 索引 level 鍵會定義訊息是否代表 Error、、 WarningInformation

DSC 會從資源收集訊息,並在組態作業的結果中顯示訊息。 DSC 直接在設定外部叫用資源時,不會收集訊息。 相反地,它們只會發出至 stderr。