【问题标题】:DSC: adding a custom resource to a composite resourceDSC:将自定义资源添加到复合资源
【发布时间】:2017-08-14 17:22:37
【问题描述】:

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

复合资源:

…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

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

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

TIA

【问题讨论】:

    标签: dsc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      @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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        • 2018-04-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        相关资源
        最近更新 更多