DSC 资源

概述

DSC 资源提供用于管理系统设置的标准化接口。 DSC 资源定义可以管理的属性,并包含调用“使其如此”的 PowerShell 代码 Invoke-DscResource

DSC 资源可以像文件一样通用,也可以像 IIS 服务器设置那样对特定内容进行建模。 相关 DSC 资源的组合并到 PowerShell 模块中。 模块为 DSC 资源提供可移植的版本控制包,并包含有关它们的元数据和文档。

每个 DSC 资源都有一个架构,用于确定将 DSC 资源与 或 配置一起使用Invoke-DscResource所需的语法。 DSC 资源的架构按以下方式定义:

  • <Resource Name>.psm1 文件:基于类的 DSC 资源在类定义中定义其架构。 语法项表示为类属性。 有关详细信息,请参阅 about_Classes
  • Schema.Mof文件:基于 MOF 的 DSC 资源使用托管对象格式schema.mof文件中定义其架构。

若要检索 DSC 资源的语法,请使用 Get-DSCResource cmdlet 和 Syntax 参数。 这类似于使用 Get-Command语法 参数来获取 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调用资源的 TestSet 方法时所使用的参数。 对 的第一次调用 Invoke-DscResource 使用 Test 方法验证服务是否 Spooler 正在运行,并将结果存储在 变量中 $TestResult

下一步取决于服务是否已处于所需状态。 最佳做法是始终在强制实施之前验证所需状态,并且仅在需要时调用 Set 方法。 在此示例中,脚本会向控制台写入一条消息,说明 DSC 资源是否处于所需状态。 然后,如果服务未运行,它将使用 Set 方法调用 Invoke-DscResource 以强制实施所需状态。