繁体   English   中英

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

[英]Azure Automation DSC - Using PSCredential in DSC Configuration

我试图将凭据传递给旨在通过Azure自动化DSC进行部署的dsc配置,尽管我似乎无法使用两种记录的方法来使其正常工作。

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

2)文档还指出,添加param()块并将pscredentials指定为参数将在编译过程中动态填充这些完全相同的参数,因此在通过门户进行编译时可以填写值...尽管这并非如此发生,并且编译作业无法识别“参数”,引发终止异常并暂停。

代码看起来像这样:

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

configuration testconfig {
   Import-DSCResource -ModuleName PSDesiredStateConfiguration

    param (
        [pscredential]$cred
    )

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

任何帮助将不胜感激,谢谢!

我最终与MS一起开了一个案子,因为github上的文档具有误导性或严重错误,并且他们提供了相当详细的答复和有用的指导...请参见下文:

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

  2. 检索凭据资产时使用的正确PowerShell命令是:Get-AutomationPSCredential我怀疑这是一些其他说明可能有用的地方。

一个关键的区别是:•Get-AutomationPSCredential返回类型为[PSCredential]的值•Get-AzureAutomationCredential返回类型为[CredentialInfo]的值•Get-AzureRMAutomationCredential返回类型为[CredentialInfo]的值•无法在适当位置使用[CredentialInfo]的[PSCredential]

另一个区别是:•Get-AutomationPSCredential在编译时而不是运行时检索凭据。 •凭据被编译到mof中•因此,对PSDscAllowPlainTextPassword的要求= $ true•mof编译器不知道Azure自动化对mof进行加密

另一个主要区别是:•在运行时执行Get-AzureAutomationCredential和Get-AzureRMAutomationCredential。 •因此,脚本必须先登录到Azure才能使用。 •确实没有理由在DSC配置中使用这些cmdlet。 •我确实尝试过一次,只是看它是否可以工作(但仅在成功登录Azure之后)

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

本文不正确,并且由于以下两个原因,配置无法按原样工作:•凭据期望使用[PSCredential]类型的值([CredentialInfo]类型的值将不起作用)•本文中的DSC配置无法登录Azure因此Get-AzureRMAutomationCredential将失败

我可以理解,用于检索自动化凭据资产的三个不同的PowerShell命令可能会造成混淆。 请允许我进一步说明一下:•Get-AzureAutomationCredential使用Azure服务管理API(ASM)•Get-AzureRMAutomationCredential使用Azure资源管理API(ARM)•ASM与旧的Azure门户相对应,ARM与新的Azure门户相对应Azure门户(Ibiza)•ASM早于ARM,并且为了向后兼容而继续受支持。 •为自动化运行手册创建了Get-AutomationPSCredential•在Azure自动化DSC中工作(但在Windows PowerShell DSC中不工作)•所有Orchestrator.AssetManagement.Cmdlet也在Azure自动化DSC中•您可以在通过编辑Runbook并在左窗格中展开cmdlet来创建Azure门户•尽管在Runbook上下文中,以下文章也介绍了这些cmdlet。 https://azure.microsoft.com/zh-CN/blog/getting-started-with-azure-automation-automation-assets-2/

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

转到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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM