如何建立自訂機器設定套件成品
開始之前,建議您先閱讀機器設定的概觀頁面。
在稽核/設定 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 機器。 該範例會將機器設定為在 Process
和 Machine
範圍中建立 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 設定文件完整路徑。
- 路徑:輸出資料夾路徑。 這是選擇性參數。 如果未指定,則會在目前的目錄中建立套件。
- 類型:(
Audit
、AuditandSet
) 決定設定是否只應稽核,或者如果設定超過所需的狀態,是否應該變更機器的狀態。 預設值為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
物件會依已建立的套件 Name 和 Path 傳回。
Name Path
---- ----
MyConfig C:\dsc\MyConfig.zip
機器設定成品的預期內容
機器組態會使用已完成的套件來建立「Azure 原則」定義。 此套件包含:
- 以 MOF 形式編譯的 DSC 設定
- Modules 資料夾
- GuestConfiguration 模組
- DscNativeResources 模組
- MOF 所需的 DSC 資源模組
- 儲存套件
type
和version
的中繼設定檔案
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
,以在內容成品中包含第三方平台的內容。