DSC:向复合资源添加自定义资源

时间:2017-08-14 17:22:38

标签: dsc

我有一个复合资源。我的理解是复合资源是一种被视为资源的配置集合。我认为资源是一个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引用的单独资源(模块)({{1} })?

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

TIA

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

@ravikanth,感谢您的意见,但是,对我来说,这不是完整的解决方案,因为我的资源有多个复合资源和多个资源。隐藏在this答案中的关键是在复合资源中使用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

但是,在“顶级”配置中,我使用09/25/2017

HTH