复合 DSC 资源未在 Azure 自动化中导出

Posted

技术标签:

【中文标题】复合 DSC 资源未在 Azure 自动化中导出【英文标题】:Composite DSC Resources not Exporting in Azure Automation 【发布时间】:2021-02-04 02:42:07 【问题描述】:

我正在尝试构建我的第一个复合 DSC 资源模块以在 Azure 自动化中使用,而在我的一生中,我无法弄清楚我忽略了什么愚蠢的东西,它阻止了我的 DSC 资源被导出或可用在我创建的测试配置中。我的第一次尝试很大很花哨,有params 并导入了其他 DSCResouces,效果很好,令人印象深刻,但根本没有用。

所以我决定使用我的非复合配置中的代码块创建一个超级简单的配置,一切正常。我压缩了下面列出的所有内容,将其导入到我的 Azure 自动化模块中,并且没有导出任何活动。没有错误,似乎没有什么不开心,但没有任何反应。该模块已列出,但它不执行任何操作。

对其运行测试配置失败,说它无法导入模块 DefaultEnvironment,请尝试导入模块。

我尝试了以下两个配置,都因相同的原因而失败:

configuration testdscconfig 
    Import-Module TestDSC
    Import-DscResource -Name DefaultRegistry
    Import-DscResource -Name DefaultEnvironment

    node localhost 
        DefaultEnvironment SetDefaultEnvironment 
        DefaultRegistry SetDefaultRegistry 
    

configuration testdscconfig 
    Import-DSCResource -ModuleName TestDSC

    node localhost 
        DefaultEnvironment SetDefaultEnvironment 
        DefaultRegistry SetDefaultRegistry 
    

我的复合 DSC 配置结构如下:

TESTDSC
│   TestDSC.psd1
│   TestDSC.psm1
│
└───DSCResources
    ├───DefaultEnvironment
    │       DefaultEnvironment.psd1
    │       DefaultEnvironment.schema.psm1
    │
    └───DefaultRegistry
            Defaultregistry.psd1
            DefaultRegistry.schema.psm1

TestDSC.psm1 是一个空文件。 TestDSC.psd1 包含:

 @  
    RootModule = "TestDSC.psm1"
    ModuleVersion = '0.0.8'
    GUID = <GUID>    
    Author = 'RobbieCrash'    
    CompanyName = 'Noncorp'
    
    # DSC resources to export from this module
    DscResourcesToExport = @(
        'DefaultEnvironment' 
        'DefaultRegistry'
    )

DSCResources\DefaultRegistry\DefaultRegistry.psd1:

@RootModule="DefaultRegistry.schema.psm1"

DSCResources\DefaultRegistry\DefaultRegistry.schema.psm1:

Configuration DefaultRegistry 
    Registry SecureDotNetCryptox64 
        Ensure              =   "Present"
        Key                 =   "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319\"
        ValueName           =   "SchUseStrongCrypto"
        ValueData           =   "1"
    

    Registry SecureDotNetCryptox86 
        Ensure              =   "Present"
        Key                 =   "HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319"
        ValueName           =   'SchUseStrongCrypto' 
        ValueData           =   '1'
    

DefaultEnvironment 设置相同,但配置块看似无害。删除一个或另一个没有区别,编译失败并且没有资源被导出。

我尝试将RootModule= 设置为".\Resource.schema.psm1""Resource.schema.psm1",经过验证的案例,验证代码中没有任何不可靠的内容或拼写错误等。

我很肯定我在某处遗漏了一些重要的细节,但在浏览了 20 篇不同的文章以及 StackExchange/相关主题之后,我坐在这里傻傻地盯着我必须遗漏的东西。

【问题讨论】:

【参考方案1】:

从上面开始,我做了一些测试,最低要求是定义RootModuleModuleVersion,所以DefaultRegistry.psd1可以是:

@
  RootModule    = 'DefaultRegistry.schema.psm1'
  ModuleVersion = '1.0.0'

【讨论】:

【参考方案2】:

事实证明,要正确检测,资源的清单实际上需要是完整清单,而不仅仅是存根条目RootModule = "module" documentation states 是必需的,我是个懒惰的白痴。 :)

【讨论】:

以上是关于复合 DSC 资源未在 Azure 自动化中导出的主要内容,如果未能解决你的问题,请参考以下文章

Terraform DSC 配置与节点配置中的 Azure 自动化

xSCOM 1.3.3.0 在 Azure VM 上运行 DSC 时引发异常

带有 PowerShell 7 的 Azure DSC

是否可以通过 ARM 模板将分配的 Azure DSC 配置更新到 VM?

powershell Zip自定义DSC模块,用于上传到Azure Automation DSC

Azure DSC 将 Blob 上传到 Azure VM