概述
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
调用 测试 和 设置资源 方法时所使用的参数。 对 Invoke-DscResource
的第一次调用使用 Test 方法来验证 Spooler
服务是否正在运行并将结果存储在 $TestResult
变量中。
下一步取决于服务是否已处于所需状态。 最好在强制实施之前始终验证所需状态,并在需要时仅调用 Set 方法。 在此示例中,脚本将一条消息写入控制台,说明 DSC 资源是否处于所需状态。 然后,如果服务未运行,它将使用 Set 方法调用 Invoke-DscResource
以强制实施所需状态。