DSC 設定
適用於:Windows PowerShell 4.0、Windows PowerShell 5.0
DSC 設定是一種定義特殊類型函式的 PowerShell 指令碼。 若要定義設定,請使用 PowerShell 關鍵字 Configuration。
Configuration MyDscConfiguration {
Node "TEST-PC1" {
WindowsFeature MyFeatureInstance {
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance {
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
將指令碼儲存為 .ps1
檔案。
設定語法
設定指令碼包含下列項目:
- Configuration 區塊。 這是最外層的指令碼區塊。 定義它的方式,是使用 Configuration 關鍵字並提供名稱。 在這裡情況下,組態的名稱是
MyDscConfiguration
。 - 一個或多個 Node 區塊。 它們會定義您要設定的節點 (電腦或 VM)。
在上述組態中,有一個 以 名為
TEST-PC1
的計算機為目標的 Node 區塊。 Node 區塊可以接受多部計算機名稱。 - 一個或多個資源區塊。 設定就在這裡為它要設定的資源設定屬性。 在此情況下,有兩個資源區塊,每個區塊都會呼叫 WindowsFeature 資源。
注意
WindowsFeature DSC 資源僅適用於 Windows Server 計算機。 對於具有用戶端 OS 的電腦,例如 Windows 11,您必須改用 WindowsOptionalFeature。 For more information, see the "WindowsOptionalFeature" section of the PSDscResources documentation.
只要可以在 PowerShell 函式中執行的作業,通常在 [設定] 區塊內都可以執行。 在上述範例中,如果您不想在組態中硬式編碼目標計算機的名稱,您可以新增節點名稱的參數。
在本範例中,您在編譯設定時將節點名稱當作 ComputerName 參數來傳遞,藉以指定節點名稱。 名稱預設為 localhost
。
Configuration MyDscConfiguration
{
param
(
[string[]]$ComputerName='localhost'
)
Node $ComputerName
{
WindowsFeature MyFeatureInstance
{
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance
{
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
節點區塊也可以接受多個電腦名稱。 在上述範例中,您可以使用 -ComputerName
參數,也可以將逗號分隔的電腦清單直接傳遞給節點區塊。
MyDscConfiguration -ComputerName "localhost", "Server01"
將計算機清單指定至 Node 區塊時,您必須使用數位表示法。
Configuration MyDscConfiguration
{
Node @('localhost', 'Server01')
{
WindowsFeature MyFeatureInstance
{
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance
{
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
編譯設定
您必須先將設定編譯成 MOF 文件,才能施行設定。 呼叫設定即可完成此作業,就像您呼叫 PowerShell 函式一樣。 範例的最後一行僅包含設定名稱,並會呼叫設定。
注意
若要呼叫設定,函式必須在全域範圍內 (像任何其他 PowerShell 函式一樣)。 執行此作業的方法有二:「點執行」指令碼,或使用 F5 或按一下 ISE 的 [執行指令碼] 按鈕執行設定指令碼。 若要點執行指令碼,請執行命令 . .\myConfig.ps1
,其中 myConfig.ps1
是包含設定的指令碼檔案名稱。
當您呼叫設定時,它會:
- 解析所有的變數
- 在目前的目錄中建立和設定同名的資料夾。
- 在新的目錄中建立名為 NodeName.mof 的檔案,其中 NodeName 是設定的目標節點名稱。 如果有多個節點,每個節點都會建立一個 MOF 檔案。
注意
MOF 檔案包含目標節點的所有設定資訊。 因為這樣,這個檔案的安全防護很重要。 如需詳細資訊,請參閱保護 MOF 檔案。
編譯上述第一個設定會導致下列的資料夾結構:
. .\MyDscConfiguration.ps1
MyDscConfiguration
Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 10/23/2015 4:32 PM 2842 localhost.mof
如果設定使用參數,如同第二個範例,則必須在編譯時提供參數。 它看起來會像這樣:
. .\MyDscConfiguration.ps1
MyDscConfiguration -ComputerName 'MyTestNode'
Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 10/23/2015 4:32 PM 2842 MyTestNode.mof
在設定中使用新的資源
如果執行了前面的範例,您可能會注意到,系統警告使用了未明確匯入的資源。 現在,DSC 在 PSDesiredStateConfiguration 模組中附有 12 種資源。
Cmdlet Get-DscResource 可用於決定在系統上安裝並供 LCM 使用的資源。
這些模組放置在 $env:PSModulePath
並由 Get-DscResource 正確辨識後,仍需要載入至設定中。
Import-DscResource 是只能在設定區塊中辨識的動態關鍵字,它不是 Cmdlet。 Import-DscResource 支援兩個參數:
- ModuleName,使用 Import-DscResource 時建議用它。 它接受包含了要匯入資源 (以及模組名稱字串陣列) 的模組名稱。
- Name 是要匯入的資源名稱。 Get-DscResource 傳回的 "Name" 不是易記的名稱,而是定義資源結構描述時使用的類別名稱 (Get-DscResource 傳回 ResourceType)。
如需使用 Import-DSCResource
的詳細資訊,請參閱使用 Import-DSCResource
PowerShell v4 和 v5 的差異
在 PowerShell 4.0 中需要儲存 DSC 資源的位置存在差異。 如需詳細資訊,請參閱資源位置。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應