2016-12-02 3 views
1

実際のリソースオブジェクトをDSCで作成または削除できない場合、カスタム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には$falseが返されますので、それはSet-TargetResourceを開始し、それではインターフェイスを作成できないためです。

それに続いて、EnsureAbsentに設定されている場合、DSCリソースは何をする必要がありますか?インタフェースは、それが存在する場合は削除することはできません。コンポーネントを削除するだけで、それを行うことができます。私はすべてのインターフェイスのプロパティをデフォルト値に戻すべきですか?

答えて

1

Ensureについての質問から始めて、私はちょうどEnsureプロパティを持つ必要はないと言うでしょう。多くのリソースがありますが、それは意味をなさないところでは(Microsoftからのものでも)見つけることができます。あなたのリソースに意味がない場合は、それを含めないでください。

コンポーネントが存在しない場合はどうしたらいいですか、エラーを投げるべきです。あなたのCOMplusInterfaceリソースにDependsOnを使用して、COMplusComponentリソースの後に適用されていることを確認してください。

Test-TargetResourceは、コンポーネントが存在しないか、プロパティが一致しないかにかかわらず、状態が一致しない場合は$falseを返す必要があります。コンポーネントが存在しない場合、Set-TargetResourceが実行され、失敗するはずです。あなたは設定を使って状態を記述しようとしていますので、この部分が実行される前に設定に前提条件を設定しておく必要があります(ここではDependsOnが入ります)。

ApplicationIDは、Keyプロパティである必要があります。その他はオプションです。状態を強制する場合にのみ指定する必要があるので、このように設定を指定できるようにしてください:

COMplusComponent MyComponent 
{ 
    <# your component resource #> 
} 

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

すべて私には論理的に聞こえるよ、ありがとう! 'ApplicationID'、 'ComponentDLLPath'(またはむしろ' CLSID'だが、読み取り専用で自動生成され、ユーザーフレンドリーではない)と 'InterfaceName'特定のInterfaceリソースを一意に識別するために最低限必要なものです。 – Dijital

+0

@Dijital okあなたのケースでリソースを一意に識別するものが何であるか分かりませんでした。ソートされているように聞こえます。また、特定のインターフェイスのすべてのプロパティを一度に設定することは意味をなさないため、[このリソースをシングルトンとして実装する](https://blogs.msdn.microsoft.com/powershell/ 2015/06/22/want-to-write-a-dsc-resource-only-a-single-instance-can-be-configured /)を使用します。 – briantist

関連する問題