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

Powershell 当无法创建或删除资源对象时,自定义DSC资源应该如何工作?,powershell,dsc,Powershell,Dsc,当DSC无法创建或删除实际资源对象时,自定义DSC资源应该如何工作 在我的具体示例中,我正在编写一个用于管理COM+应用程序、组件和应用程序的资源。为应用程序和组件创建资源很好;它们可以通过编程方式创建并从目录中删除。但是,当从DLL创建组件时,会自动创建接口 我需要能够更新接口属性(即QueuingEnabled属性)。因此,我打算如下描述COM+接口的配置: COMplusInterface MyInterface { Ensure = 'Present' Applicati

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

在我的具体示例中,我正在编写一个用于管理COM+应用程序、组件和应用程序的资源。为应用程序和组件创建资源很好;它们可以通过编程方式创建并从目录中删除。但是,当从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没有该接口。
测试TargetResource
返回
$false
没有意义,因为这将启动
设置TargetResource
,然后将无法创建接口


接下来,如果
确保
设置为
缺席
,DSC资源应该怎么做?如果接口确实存在,则无法删除它,只有通过删除组件,我才能删除它。我应该将所有接口属性返回到它们的默认值吗?

从您关于
确保
的问题开始,我只想说没有任何要求要有
确保
属性。虽然大多数资源都是这样,但你会发现(甚至是来自微软的)这些资源并不太有意义。如果它对你的资源没有意义,就不要包括在内

至于如果组件不存在该怎么办,是的,您应该抛出一个错误。在
complussinterface
资源中使用
DependsOn
,以确保它在
complusscomplusscomponent
资源之后应用

无论原因是组件不存在还是属性不匹配,只要状态不匹配,
Test TargetResource
都应返回
$false
。如果组件不存在,则
Set TargetResource
将运行,并且它将失败,正如它应该的那样。您试图用配置描述状态,因此在运行此部件之前,您应该在配置中设置必要的状态(这就是
DependsOn
的作用)

我想说,
ApplicationID
应该是您的
属性,其他属性应该是可选的;您只希望在强制其状态时指定它们,因此我认为您应该能够通过以下方式指定配置:

COMplusComponent MyComponent
{
    <# your component resource #>
}

COMplusInterface MyInterface
{
    ApplicationID = 'BB5B8A1F-D70C-44BD-8ADD-E548DF39AACF'
    QueuingEnabled = $true
    DependsOn = '[COMplusComponent]MyComponent'
}
COMplusComponent MyComponent
{
}
COMplusInterface-MyInterface
{
应用程序ID='BB5B8A1F-D70C-44BD-8ADD-E548DF39AACF'
QueuingEnabled=$true
Dependenson='[COMplusComponent]MyComponent'
}

好的,我觉得一切都合乎逻辑,谢谢!关于
属性,
ApplicationID
componentdlpath
(或者更确切地说
CLSID
,但它是只读的、自动生成的,并且不是用户友好的)和
InterfaceName
(同样,比自动生成的
InterfaceID
更友好、更实用)是唯一标识给定接口资源所需的最小值。@Dijital好的,我不确定在您的情况下是什么唯一标识了该资源,听起来您已经对其进行了排序。此外,由于一次设置给定接口的所有属性似乎是有意义的,因此您可能需要深入研究。