当无法创建或删除资源对象时,自定义 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'
}
当 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'
}