2017-02-17 47 views
2

我有一个部署DSC扩展的VM模板。它一直在正常工作,但我的配置不断增长,所以我重构了它以使用复合资源并将其重新发布到使用Publish-AzureRmVMDscConfiguration的BLOB存储。使用具有Azure DSC扩展的自定义复合资源

我验证了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:\包\插件\ Microsoft.Powershell.DSC \ 2.17.0.0 \ DSCWork \ AppServerDev.ps1.0 \ AppserverDev.ps1:9炭:3

  • 节点 “本地主机”
  • ~~~~
    • CategoryInfo:ObjectNotFound:(xCustomResource \ xCustomResource:字符串) [PSDesiredStateConfiguration \节点],ParentContainsErrorRecordException
    • FullyQualifiedErrorId:CouldNotAutoLoadModule,PSDesiredSta teConfiguration \节点

这里是我的配置文件中的相关内容:

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而非DankModuleC:\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不返回任何内容。

回答

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,但现在我不确定这是否是绝对必要的。

相关问题