是否可以在DSC资源中使用可选的Key属性?

时间:2014-12-04 14:52:25

标签: powershell wmi dsc

我正在创建自定义DSC资源,我希望某个属性成为资源键的一部分,但同时也是可选的:

  • 如果用户在配置中指定了它,则它应该是键的一部分,因此无法创建具有相同值的两个实例。

  • 如果用户没有设置它,它应该表现得好像它也是键的一部分但是具有空值,这样用户就无法实例化多个资源,其他所有键都相同,但没有设置此可选参数

基本上我喜欢的是:

schema.mof文件

[ClassVersion("1.0.0.0"), FriendlyName("cMyResource")]
class Mobiltec_cMyResource : OMI_BaseResource
{
    [Key, Description("Name")] string Name;
    [Key, Description("Key1")] string Key1;
    [Key, Description("This is a key only if it is specified")] string OptionalKey2;
    [Write, Description("Ensures"), ValueMap{"Present","Absent"}, Values{"Present","Absent"}] string Ensure;
};

我想要的实现的简单表示:

function Set-TargetResource
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory)][string]$Name,
        [Parameter(Mandatory)][string]$Key1,

        # Note that this is not mandatory
        [string]$OptionalKey2,

        [ValidateSet("Present","Absent")][string]$Ensure = "Present"
    )
...
}

用法:

有效:

cMyResource Res1
{
    Name = 'name'
    Key1 = 'key1'
    OptionalKey2 = 'key2'
    OtherParameter = 'param'
}

cMyResource Res2
{
    Name = 'name'
    Key1 = 'key1'
    OptionalKey2 = 'otherKey2'
    OtherParameter = 'param'
}

同样有效:

cMyResource Res1
{
    Name = 'name'
    Key1 = 'key1'
    OtherParameter = 'param'
}

cMyResource Res2
{
    Name = 'name'
    Key1 = 'otherKey1'
    OtherParameter = 'param'
}

cMyResource Res3
{
    Name = 'name'
    Key1 = 'otherKey1'
    OptionalKey2 = 'key2'
    OtherParameter = 'param'
}

当我将属性声明为关键时,每当我尝试在配置中使用资源而不指定它时,我会收到此错误:

  

cMyModule \ cMyResource:Class' cMyResource'要求   类型为' String'的值提供财产   ' OptionalKey2&#39 ;.在:167 char:9   + cMyResource Res1   + ~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation :( :) [Write-Error],ParentContainsErrorRecordException       + FullyQualifiedErrorId:MissingValueForMandatoryProperty,cMyModule \ cMyResource

1 个答案:

答案 0 :(得分:1)

据我所知,根据我的经验,答案是否定的。

拥有[key]属性意味着它是必需的。

此外,拥有没有[key]属性的DSC资源也无法正常工作。我试着创建一个,并且没有任何抱怨直到实现,此时LCM引发了关于没有关键属性的错误。