2017-08-14 144 views
0

我有一个复合资源。我的理解是,复合资源是一种被视为资源的配置集合。我认为资源是一个PowerShell模块(但不是)。当前文件的结构如下:DSC:将自定义资源添加到复合资源

复合资源:

…1 Modules 
    └ 2 DefaultConfiguration 
     └ 3 {version} 
      ├ 4 DSCResources 
      │ ├ 5 hApplyGpo 
      │ │ ├ 5a hApplyGpo.psd1 
      │ │ └ 5b hApplyGpo.schema.psm1 
      │ └ 6 hStoragePool 
      │   ├ 6a hStoragePool.psd1 
      │   └ 6b hStoragePool.schema.psm1 
      └ 4a DefaultConfiguration.psd1 

我刚才写使用xDSCResourceDesigner定制的DSC资源,已经产生了以下文件结构:

自定义资源:

… 7 Modules 
    └ 8 hApplyGpo 
     └ 9 1.0.0.0 
      ├ 10 DSCResources 
      │  └ 11 hApplyGpo 
      │  ├ 11a hApplyGpo.psm1 
      │  └ 11b hApplyGpo.schema.mof 
      └ 10a hApplyGpo.psd1 

是否可能le合并两个hApplyGpo位于DefaultConfiguration之内还是hApplyGpo必须是由5b引用的单独资源(模块)(Import-DscResource -ModuleName hApplyGpo)?

如果有可能,复合资源结构中的哪些位置应该包含自定义资源中的文件?我的直接想法是将11与5合并,但是hApplyGpo.psd1(5a和10a)会发生什么情况。

TIA

回答

1

复合资源模块具有与自定义脚本资源模块相同的结构。唯一的区别是没有定义Get,Set和Test-TargetResource函数的PSM1文件。您可以简单地将DSCResources文件夹内的文件夹从自定义资源模块复制到复合资源的DSCResources文件夹,反之亦然。

例如,检查我在Github上的cWindowsOS模块。它将自定义资源与复合资源组合在同一资源模块中。

0

@ravikanth,感谢您的意见,但是,对我而言,这不是一个完整的解决方案,因为我的资源有多个复合资源和多个资源。 this答案中的关键是在复合资源中使用Import-DscResource -Name {resourcename}而不是Import-DscResource -ModuleName {modulename}

发布以来这个问题,创建新的自定义资源,含复合资源,现在看起来像我已经做了公平位:

… Modules 
    └ hMyResource 
     ├ DSCResources 
     │ ├───crApplyGpo 
     │ │  crApplyGpo.psd1 
     │ │  crApplyGpo.schema.psm1 
     │ │ 
     │ ├───crUpdateDriveLetter 
     │ │  crUpdateDriveLetter.psd1 
     │ │  crUpdateDriveLetter.schema.psm1 
     │ │ 
     │ ├───ARC_hApplyGpo 
     │ │  ARC_hApplyGpo.psm1 
     │ │  ARC_hApplyGpo.schema.mof 
     │ │ 
     │ └───ARC_hUpdateDriveLetter 
     │   ARC_hUpdateDriveLetter.psm1 
     │   ARC_hUpdateDriveLetter.schema.mof 
     │ 
     ├ hMyResource.psd1 
     └ hMyResource.psm1 

crApplyGpo.schema.psm1为例:

Configuration crApplyGpo 
{ 
    [cmdletbinding()] 
    Param 
    (
     [ValidateSet("Present","Absent")] 
     [String]$Ensure = "Present" 
    ) 

    Import-DscResource -Name hApplyGpo 
    #Import-DscResource -ModuleName hMyResource #This doesn't work in a composite resource 

    hApplyGpo hApplyGpo 
    { 
     RegistryValue = 0 
     Ensure = $Ensure 
    } 
} 

然而,在 “顶级” 配置,我用Import-DscResource -ModuleName hMyResource

HTH