共用方式為


如何建立自訂機器設定套件成品

開始之前,建議您先閱讀機器設定的概觀頁面。

在稽核/設定 Windows 和 Linux 時,機器設定會使用 Desired State Configuration (DSC)。 DSC 設定會定義電腦所應處的條件。

重要

稽核環境及套用設定狀態的自訂套件處於正式發行 (GA) 支援狀態。 不過,具有下列限制:

若要使用套用設定的機器設定套件,則 Azure VM 客體設定延伸模組 1.26.24 版或更新版本,或 Arc 代理程式 1.10.0 或更新版本,為必要項。

GuestConfiguration 模組僅適用於 Ubuntu 18 和更新版本。 不過,模組所產生的套件和原則可以在 Azure 或 Arc 中支援的任何 Linux 發行版本和版本上使用。

測試套件無法在 macOS 上使用。

請勿在自訂內容套件中使用密碼或機密資訊。

請用下列步驟來建立自己的設定,以管理 Azure 或非 Azure 機器的狀態。

安裝 PowerShell 7 和必要的 PowerShell 模組

首先,遵循如何設定機器設定製作環境中的步驟。 這些步驟可協助您為作業系統、GuestConfiguration 模組和 PSDesiredStateConfiguration 模組安裝必要的 PowerShell 版本。

撰寫設定

建立設定套件前,請先撰寫並編譯 DSC 設定。 我們也提供適用於 Windows 和 Linux 的範例設定。

重要

編譯 Windows 的設定時,請使用 PSDesiredStateConfiguration 2.0.7 版 (穩定版本)。 編譯 Linux 的設定時,請安裝發行前版本 3.0.0。

此範例設定適用於 Windows 機器。 該範例會將機器設定為在 ProcessMachine 範圍中建立 MC_ENV_EXAMPLE 環境變數。 變數的值會設定為 'This was set by machine configuration'

Configuration MyConfig {
    Import-DscResource -Name 'Environment' -ModuleName 'PSDscResources'
    Environment MachineConfigurationExample {
        Name   = 'MC_ENV_EXAMPLE'
        Value  = 'This was set by machine configuration'
        Ensure = 'Present'
        Target = @('Process', 'Machine')
    }
}

MyConfig

如果該定義儲存在 MyConfig.ps1 指令檔中,您可以執行指令碼來編譯設定。

. .\MyConfig.ps1
    Directory: C:\dsc\MyConfig

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           5/16/2023 10:39 AM           1080 localhost.mof

設定會編譯至目前工作目錄中 MyConfig 資料夾中的 localhost.mof 檔案。 將 localhost.mof 重新命名為您要作為套件名稱的名稱,例如 MyConfig.mof

Rename-Item -Path .\MyConfig\localhost.mof -NewName MyConfig.mof -PassThru
    Directory: C:\dsc\MyConfig

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           5/16/2023 10:40 AM           1080 MyConfig.mof

注意

此範例示範如何撰寫和編譯 Windows 機器的設定。 針對 Linux,您必須使用 PowerShell 類別建立自訂 DSC 資源模組。 使用 PowerShell 類別撰寫自訂 DSC 資源一文中包含自訂資源和設定的完整範例,並以機器設定進行測試。

本文的其餘部分適用於針對 Linux 和 Windows 機器定義的設定,但提及平台專屬考慮的部分除外。

建立設定套件成品

完成 MOF 編譯後,必須將支援的檔案封裝在一起。 機器組態會使用已完成的套件來建立「Azure 原則」定義。

New-GuestConfigurationPackage Cmdlet 會建立套件。 設定所需的模組必須可用於 $Env:PSModulePath 開發環境,模組中的命令才能將之新增至套件。

建立 Windows 內容時所使用的 New-GuestConfigurationPackage Cmdlet 參數:

  • 名稱:機器設定套件名稱。
  • 設定:已編譯的 DSC 設定文件完整路徑。
  • 路徑:輸出資料夾路徑。 這是選擇性參數。 如果未指定,則會在目前的目錄中建立套件。
  • 類型:(AuditAuditandSet) 決定設定是否只應稽核,或者如果設定超過所需的狀態,是否應該變更機器的狀態。 預設值為 Audit
  • FrequencyMinutes:機器上封裝評估的頻率,以分鐘為單位。
  • FilesToInclude:要包含在所產生封裝中之其他檔案的路徑陣列清單。

此步驟不需要提高權限。 如果您執行多次命令,則會使用 Force 參數覆寫現有的套件。

下列命令會建立套件成品:

# Create a package that will only audit compliance
$params = @{
    Name          = 'MyConfig'
    Configuration = './MyConfig/MyConfig.mof'
    Type          = 'Audit'
    Force         = $true
}
New-GuestConfigurationPackage @params
# Create a package that will audit and apply the configuration (Set)
$params = @{
    Name          = 'MyConfig'
    Configuration = './MyConfig/MyConfig.mof'
    Type          = 'AuditAndSet'
    Force         = $true
}
New-GuestConfigurationPackage @params

物件會依已建立的套件 NamePath 傳回。

Name     Path
----     ----
MyConfig C:\dsc\MyConfig.zip

機器設定成品的預期內容

機器組態會使用已完成的套件來建立「Azure 原則」定義。 此套件包含:

  • 以 MOF 形式編譯的 DSC 設定
  • Modules 資料夾
    • GuestConfiguration 模組
    • DscNativeResources 模組
    • MOF 所需的 DSC 資源模組
  • 儲存套件 typeversion 的中繼設定檔案

PowerShell Cmdlet 會建立套件 .zip 檔案。 而無需根層級資料夾或版本資料夾。 套件格式必須為 .zip 檔案,且未解壓縮時總大小不能超過 100 MB。

您可以展開封存,以使用 Expand-Archive Cmdlet 來進行檢查。

Expand-Archive -Path .\MyConfig.zip -DestinationPath MyConfigZip

您可以使用 PowerShell 取得未壓縮套件的大小總計。

Get-ChildItem -Recurse -Path .\MyConfigZip |
    Measure-Object -Sum Length |
    ForEach-Object -Process {
        $Size = [math]::Round(($_.Sum / 1MB), 2)
        "$Size MB"
    }

使用第三方工具來擴充機器設定

適用於機器設定的成品套件,可以藉由擴充來涵蓋第三方工具。 若要擴充機器設定則必須開發兩種元件。

  • 預期狀態設定資源,可處理有關管理第三方工具的所有活動
    • 安裝
    • 叫用
    • 轉換輸出
  • 工具的正確格式內容,以便以原生方式使用

如果社群解決方案尚不存在,則需要自訂開發 DSC 資源。 在 PowerShell 資源庫中搜尋 GuestConfiguration 標籤,即可探索社群解決方案。

注意

機器設定擴充性表示為「自備授權」的案例。 在使用前,請確定您已符合所有第三方工具的條款及條件。

在開發環境中安裝 DSC 資源之後,請使用 FilesToInclude 參數進行 New-GuestConfigurationPackage,以在內容成品中包含第三方平台的內容。

後續步驟