我有一个部署DSC扩展的VM模板。它工作正常,但我的配置正在增长,所以我已经重构它以使用复合资源并将其重新发布到使用Publish-AzureRmVMDscConfiguration
的blob存储。
我验证了blob存储中的.ps1.zip文件包含我的自定义模块,并且该模块列在dscmetadata.json下。但是,部署时,DSC扩展失败。 C:\WindowsAzure\Logs\Plugins\Microsoft.Powershell.DSC\2.17.0.0
下的日志显示原因:
C:\包\插件\ Microsoft.Powershell.DSC \ 2.17.0.0 \ BIN .. \ DSCWork \ AppServerDev.ps1.0 \ AppserverDev.ps1
PSDesiredStateConfiguration \ node:模块' xCustomResource'可以 没有加载。有关更多信息,请运行“导入 - 模块” xCustomResource'
在C:\ Packages \ Plugins \ Microsoft.Powershell.DSC \ 2.17.0.0 \ DSCWork \ AppServerDev.ps1.0 \ AppserverDev.ps1:9 char:3
- node" localhost"
- ~~~~
- CategoryInfo:ObjectNotFound:(xCustomResource \ xCustomResource:String) [PSDesiredStateConfiguration \ node],ParentContainsErrorRecordException
- FullyQualifiedErrorId:CouldNotAutoLoadModule,PSDesiredStateConfiguration \ node
以下是我的配置文件的相关位:
configuration AppServerDev
{
param($environment)
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Import-DscResource -ModuleName 'SaaSModule'
node "localhost"
{
LocalConfigurationManager
{
RebootNodeIfNeeded = $true
ConfigurationMode = "ApplyAndAutoCorrect"
ConfigurationModeFrequencyMins = 1440
}
xDCTPlatformVM VM {
OctopusParametersFile = $environment
ChocolateyPackages = @(
'googlechrome',
'notepadplusplus',
'7zip',
'microsoftwse',
'octopusdeploy.tentacle',
'sqlserver-cmdlineutils'
)
}
}
}
正在运行Get-Module -ListAvailable
会发现DankModule
已找到,我可以从powershell运行Import-Module DankModule
并按预期工作。我认为混淆来自于尝试导入xCustomResource
而不是DankModule
,但C:\Packages\Plugins\Microsoft.Powershell.DSC\2.17.0.0\DSCWork
下的.ps1文件说
Import-Module "DankModule"
而不是
Import-Module "xCustomType"
为什么要尝试导入xCustomType
而不是DankModule
?如何找到可用的DankModule
并包含xCustomType
?
更新:Get-Module -ListAvailable
已安装DankModule
,但Get-DSCResource -Module DankModule
并未返回任何内容。
答案 0 :(得分:1)
我不确定,但我认为这是我的一个新手错误,因为我没有构建PowerShell模块的经验。我使用this page和this one来构建我的模块,我使用New-ModuleManifest
得到了一个有效的模块文件,我在两个文件中都提到了正确的文件结构例如
C:\Program Files\WindowsPowerShell\Modules\
DankModule
DankModule.psd1
DankModule.psm1
DSCResources
xCustomResource
xCustomResource.psd1
RootModule = ‘xCustomResource.schema.psm1'
xCustomResource.schema.psm1
Configuration, no Node block
但我没有意识到我还有一些调整。我需要纠正DankModule.psd1中的RootModule
属性,如下所示:
RootModule = 'C:\Program Files\WindowsPowerShell\Modules\DankModule\DankModule.psm1'
还需要在我的空白DankModule.psm1中添加一行引用我的xCustomResource.schema.psm1等效项:
. .\DSCResources\xCustomResource\xCustomResource.schema.psm1
这是我的模块级.psm1文件中唯一的一行,现在一切正常。我也曾一度从我的.psd1文件中删除了所有\0
,但现在我不确定这是否是绝对必要的。