簡體   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