当无法创建或删除资源对象时,自定义 DSC 资源应该如何表现?

How should custom DSC resources behave when the resource object cannot be created or removed?

当 DSC 无法创建或删除实际资源对象时,自定义 DSC 资源应该如何表现?

在我的具体示例中,我正在编写用于管理 COM+ 应用程序、组件和 Interfaces 的资源。为应用程序和组件创建资源很好;它们可以以编程方式从目录中创建和删除。但是,当从 DLL 创建组件时,会自动创建接口。

我需要能够更新接口属性(即 QueuingEnabled 属性)。因此,我打算如下描述 COM+ 接口的配置:

COMplusInterface MyInterface
{
    Ensure = 'Present'
    ApplicationID = 'BB5B8A1F-D70C-44BD-8ADD-E548DF39AACF'
    ComponentDLLPath = 'C:\Program Files\MyApplication\bin\MyComponent.dll'
    InterfaceName = 'MyInterface'
    Description = 'This is my interface'
    QueuingEnabled = $true
}

但是如果应用程序或组件还不存在,这个资源应该抛出错误吗?同样,如果 DLL 只是没有该接口。 Test-TargetResource returning $false 没有意义,因为这将启动 Set-TargetResource,然后将无法创建接口。

接着,如果Ensure设置为Absent,DSC资源应该做什么?如果接口存在,则无法删除,只有删除组件才能做到这一点。我应该 return 将所有接口属性设为默认值吗?

从你关于 Ensure 的问题开始,我只想说没有任何要求 Ensure 属性。虽然大多数资源都有,但您会发现有些资源(甚至来自 Microsoft)不太有意义。如果它对您的资源没有意义,请不要包含它。

至于组件不存在怎么办,是的,应该报错。在您的 COMplusInterface 资源中使用 DependsOn 以确保它在您的 COMplusComponent 资源之后应用。

Test-TargetResource 应该 return $false 只要状态不匹配,无论原因是组件不存在,还是属性不匹配。如果该组件不存在,那么 Set-TargetResource 将 运行,并且它应该会失败。您正在尝试使用您的配置来描述状态,因此您应该在此部分 运行s 之前在配置中设置先决条件状态(这就是 DependsOn 出现的地方)。

我会说 ApplicationID 应该是你的 Key 属性,其他的应该是可选的;你只想在强制它们的状态时指定它们,所以我认为你应该能够以这种方式指定你的配置:

COMplusComponent MyComponent
{
    <# your component resource #>
}

COMplusInterface MyInterface
{
    ApplicationID = 'BB5B8A1F-D70C-44BD-8ADD-E548DF39AACF'
    QueuingEnabled = $true
    DependsOn = '[COMplusComponent]MyComponent'
}