DSC 資源
概觀
DSC 資源提供標準化介面來管理系統的設定。 DSC 資源會定義您可以管理的屬性,並包含呼叫「讓它成為」的 PowerShell 程式代碼 Invoke-DscResource
。
DSC 資源可以將某個專案模型化為一般檔案或 IIS 伺服器設定的特定專案。 相關 DSC 資源的群組會合併到 PowerShell 模組中。 模組提供 DSC 資源的可攜式版本套件,並包含其相關元數據和檔。
每個 DSC 資源都有一個架構,可決定搭配或設定使用 DSC 資源Invoke-DscResource
所需的語法。 DSC 資源的架構是以下列方式定義:
<Resource Name>.psm1
file:類別型 DSC 資源會在類別定義中定義其架構。 語法專案會表示為類別屬性。 如需詳細資訊,請參閱 about_Classes。Schema.Mof
file:MOF 型 DSC 資源會使用 Managed 物件格式,在schema.mof
檔案中定義其架構。
若要擷取 DSC 資源的語法,請使用 Get-DSCResource Cmdlet 搭配 Syntax 參數。 這就像搭配使用 Get-Command 搭配 Syntax 參數來取得 Cmdlet 語法。 輸出會顯示 DSC 組態中用於 DSC 資源區塊的範本。
Get-DscResource -Syntax Service
Service [String] #ResourceName
{
Name = [string]
[BuiltInAccount = [string]{ LocalService | LocalSystem | NetworkService }]
[Credential = [PSCredential]]
[Dependencies = [string[]]]
[DependsOn = [string[]]]
[Description = [string]]
[DesktopInteract = [bool]]
[DisplayName = [string]]
[Ensure = [string]{ Absent | Present }]
[Path = [string]]
[PsDscRunAsCredential = [PSCredential]]
[StartupTimeout = [UInt32]]
[StartupType = [string]{ Automatic | Disabled | Manual }]
[State = [string]{ Ignore | Running | Stopped }]
[TerminateTimeout = [UInt32]]
}
如同 Cmdlet 語法,方括弧中的 索引鍵 是選擇性的。 型別會指定每個索引鍵預期的數據類型。
若要確保 Spooler
服務正在執行:
$SharedDscParameters = @{
Name = 'Service'
ModuleName = 'PSDscResources'
Property = @{
Name = 'Spooler'
State = 'Running'
}
}
$TestResult = Invoke-DscResource -Method Test @SharedDscParameters
if ($TestResult.InDesiredState) {
Write-Host -ForegroundColor Cyan -Object 'Already in desired state.'
} else {
Write-Host -ForegroundColor Magenta -Object 'Enforcing desired state.'
Invoke-DscResource -Method Set @SharedDscParameters
}
$SharedDscParameters
變數是哈希表,其中包含使用 Invoke-DscResource
呼叫資源的Test和Set方法時所使用的參數。 第一次呼叫 Invoke-DscResource
會使用 Test 方法來驗證服務是否 Spooler
正在執行,並將結果儲存在變數中 $TestResult
。
下一個步驟取決於服務是否已處於所需狀態。 最佳做法是在強制執行之前一律先確認所需的狀態,並在必要時只呼叫 Set 方法。 在此範例中,腳本會將關於 DSC 資源是否處於所需狀態的訊息寫入主控台。 然後,如果服務未執行,它會使用 Set 方法來呼叫 Invoke-DscResource
,以強制執行所需的狀態。