使用Azure DSC扩展

时间:2017-02-17 20:15:21

标签: azure deployment azure-powershell dsc

我有一个部署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并未返回任何内容。

1 个答案:

答案 0 :(得分:1)

我不确定,但我认为这是我的一个新手错误,因为我没有构建PowerShell模块的经验。我使用this pagethis 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,但现在我不确定这是否是绝对必要的。