我有一个复合资源。我的理解是复合资源是一种被视为资源的配置集合。我认为资源是一个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
答案 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