我试图将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"
}
}
}
非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
我最后用MS打开一个案例,因为github上的文档有误导性或严重错误,他们提供了非常详细的回复和有用的指导......见下文:
对于命令行,如果您还没有看到它们,这些是最好的文章: 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
- 醇>
检索凭据资产时使用的正确PowerShell命令是:Get-AutomationPSCredential我怀疑这是某些地方 其他解释可能会有所帮助。
一个关键的区别是:•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