未在 Azure 自动化中导出的复合 DSC 资源
Composite DSC Resources not Exporting in Azure Automation
我正在尝试构建我的第一个复合 DSC 资源模块以用于 Azure 自动化,在我的一生中,我无法弄清楚我忽略了什么愚蠢的事情,它阻止了我的 DSC 资源被导出,或可用于我创建的测试配置。我的第一次尝试很大很花哨,有 param
s 并导入了其他 DSCResouce,非常棒,令人印象深刻,但根本没有用。
所以我决定使用我的非复合配置中的代码块创建一个超级简单的配置,它们都可以正常工作。我压缩了下面列出的所有内容,将其导入到我的 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/related 个线程之后,我坐在这里傻眼了,对我一定遗漏的东西虎视眈眈。
事实证明,要正确检测,资源清单实际上需要是完整清单,而不仅仅是存根条目 RootModule = "module"
documentation 状态是必需的,我是个懒惰的白痴。 :)
根据上面的内容,我做了一些测试,最低要求是定义了RootModule
和ModuleVersion
,所以DefaultRegistry.psd1
可以是:
@{
RootModule = 'DefaultRegistry.schema.psm1'
ModuleVersion = '1.0.0'
}
我正在尝试构建我的第一个复合 DSC 资源模块以用于 Azure 自动化,在我的一生中,我无法弄清楚我忽略了什么愚蠢的事情,它阻止了我的 DSC 资源被导出,或可用于我创建的测试配置。我的第一次尝试很大很花哨,有 param
s 并导入了其他 DSCResouce,非常棒,令人印象深刻,但根本没有用。
所以我决定使用我的非复合配置中的代码块创建一个超级简单的配置,它们都可以正常工作。我压缩了下面列出的所有内容,将其导入到我的 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/related 个线程之后,我坐在这里傻眼了,对我一定遗漏的东西虎视眈眈。
事实证明,要正确检测,资源清单实际上需要是完整清单,而不仅仅是存根条目 RootModule = "module"
documentation 状态是必需的,我是个懒惰的白痴。 :)
根据上面的内容,我做了一些测试,最低要求是定义了RootModule
和ModuleVersion
,所以DefaultRegistry.psd1
可以是:
@{
RootModule = 'DefaultRegistry.schema.psm1'
ModuleVersion = '1.0.0'
}