Azure自动化DSC - 在DSC配置中使用PSCredential

时间:2017-04-20 00:58:31

标签: powershell azure azure-powershell dsc azure-automation

我试图将pscredentials传递给用于通过Azure自动化DSC进行部署的dsc配置,但我似乎无法使用两种记录的方法使其工作。

1)第一种方法表明可以将PSCredential添加到与用于dsc的自动化帐户关联的凭证存储中。我能找到的所有文档都涉及azure经典门户网站,并指示您选择凭证类型。'但是,经典门户网站中不再提供Azure自动化管理,并且新门户网站没有“自动化”类型'下拉新凭据,类型是' Microsoft.Azure.Commands.Automation.Model.CredentialInfo' - 它没有暴露pscredential类型具有的getnetworkcredential()方法(需要从dsc配置中获取纯文本密码以设置新用户[user dsc resource])。我是否在这里遗漏了一些东西,或者Azure处于一种奇怪的状态,因为从经典到新的自动化功能门户的切换。我还尝试使用Get-AutomationPSCredential来读取我添加到新门户的凭据,看它是否隐含地进行了类型转换,但是它也没有工作(没有找到任何对象)名称)。

2)文档还指出添加param()块并将pscredentials指定为参数将在编译期间动态填充那些相同的参数,因此在通过门户网站编译时可以填写值...尽管这样没有发生,编译工作无法识别' param,'抛出终止异常并停止。

代码看起来像这样:

$configdata = @{
    AllNodes = @(
        @{
            NodeName = "samplenode"
            PSDSCAllowPlainTextCredential = $true
}
)
}

configuration testconfig {
   Import-DSCResource -ModuleName PSDesiredStateConfiguration

    param (
        [pscredential]$cred
    )

    Node $AllNodes.NodeName {
        User testuser {
        "blah blah blah"
}
}
}

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

我最后用MS打开一个案例,因为github上的文档有误导性或严重错误,他们提供了非常详细的回复和有用的指导......见下文:

  
      
  1. 对于命令行,如果您还没有看到它们,这些是最好的文章:   https://msdn.microsoft.com/en-us/powershell/dsc/configData   https://msdn.microsoft.com/en-us/powershell/dsc/configdatacredentials   https://docs.microsoft.com/en-us/azure/automation/automation-dsc-compile#credential-assets

  2.   
  3. 检索凭据资产时使用的正确PowerShell命令是:Get-AutomationPSCredential我怀疑这是某些地方   其他解释可能会有所帮助。

  4.         

    一个关键的区别是:•Get-AutomationPSCredential返回a   类型值[PSCredential]•Get-AzureAutomationCredential返回a   类型[CredentialInfo]的值•Get-AzureRMAutomationCredential   返回[CredentialInfo]类型的值•[CredentialInfo]不能   用来代替[PSCredential]

         

    另一个区别是:•Get-AutomationPSCredential检索   编译时的凭据,而不是运行时。 •凭证是   编入mof•因此需要   PSDscAllowPlainTextPassword = $ true•mof编译器无法识别   Azure自动化加密mof

         

    另一个主要区别是:•Get-AzureAutomationCredential和   Get-AzureRMAutomationCredential在运行时执行。 •因此,   脚本必须先登录Azure才能使用。 •确实有   没有理由在DSC配置中使用这些cmdlet。 •我确实尝试过   曾经只是为了看看它是否会起作用而且确实如此(但仅限于之后   成功的Azure登录)

         

    话虽如此,我确实注意到了Get-AzureRMAutomationCredential   您引用的Microsoft文章。   https://github.com/Microsoft/azure-docs/blob/master/articles/automation/automation-dsc-compile.md#credential-assets

         

    这篇文章不正确,配置不会按原样运作   有两个原因•Credential需要类型为[PSCredential]的值(a   类型[CredentialInfo]的值不起作用)•DSC配置   在文章中没有登录到Azure等   Get-AzureRMAutomationCredential将失败

         

    我可以理解三种不同的PowerShell命令   检索Automation Credential Asset可能会令人困惑。请允许我   再补充一点澄清:   •Get-AzureAutomationCredential使用Azure服务管理API   (ASM)•Get-AzureRMAutomationCredential使用Azure资源   管理API(ARM)•ASM与旧的Azure门户ARM相对应   与新的Azure门户(Ibiza)相对应•ASM出现在ARM之前   并继续支持向后兼容性。 •   Get-AutomationPSCredential是为Automation Runbooks创建的。它   适用于Azure自动化DSC(但它在Windows中不起作用   PowerShell DSC)•所有Orchestrator.AssetManagement.Cmdlets也是   在Azure自动化DSC中•您可以在Azure门户中找到它们   编辑Runbook并在左窗格中展开cmdlet•   以下文章也描述了这些cmdlet,尽管在上下文中   一本Runbook。   https://azure.microsoft.com/en-us/blog/getting-started-with-azure-automation-automation-assets-2/

         

    要记住的重要一点是   Orchestrator.AssetManagement.Cmdlets是•打算使用   仅在自动化环境中(例如,Runbook或DSC)   配置)•不能在其他任何地方使用,也不能在   交互式PowerShell会话。 •在DSC配置中,它们是   在编译时评估而不是在运行时评估•DSC配置是   编译成静态定义(MOF),而不是可执行代码•唯一   异常是脚本资源,它执行PowerShell   运行时https://msdn.microsoft.com/en-us/PowerShell/DSC/scriptResource

答案 1 :(得分:0)

转到Azure自动化凭据并创建凭据对象。上传DSC配置:

Import-AzureRmAutomationDscConfiguration -SourcePath 'somepath'  `
-ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccountName -Published -Force

准备配置数据和参数:

$ConfigurationData = @{ 
    AllNodes = @(
        @{
            NodeName = $nodeName
            PSDscAllowPlainTextPassword = $true
        }
    )
}

$Parameters = @{
    "nodeName" = $nodeName
    "cred" = 'Azure Automation Credentials Name'
}

编译它:

Start-AzureRmAutomationDscCompilationJob -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccountName `
-ConfigurationName 'anything' -Parameters $Parameters -ConfigurationData $ConfigurationData