簡體   English   中英

Microsoft Azure(自動化):Runbook將哈希作為參數傳遞

[英]Microsoft Azure (Automation): Runbook passing Hash as Parameter

我試圖將{"server":"database","server2":"database_b"}類的哈希作為參數傳遞給Microsoft Azure上的Runbook。 但是都沒有

[parameter(Mandatory=$true)] [hashtable]$ServersWithCorrespondingDatabase,

也不

[parameter(Mandatory=$true)] [object]$ServersWithCorrespondingDatabase,

似乎有效?

在此示例Runbook Gallery中,它們與參數ChildRunbookInputParams用作哈希表,例如:

Start-ChildRunbook ` 
    -ChildRunbookName "Update-VM" ` 
    -ChildRunbookInputParams @{'VMName'='VM204';'Retries'=3} ` 
    -AzureConnectionName "Visual Studio Ultimate with MSDN" 
    -AutomationAccountName "Contoso IT Automation Production" ` 
    -WaitForJobCompletion $true ` 
    -ReturnJobOutput $true ` 
    -JobPollingIntervalInSeconds 20 ` 
    -JobPollingTimeoutInSeconds 120 

但是不知何故我無法將字符串@{"Server"="DB";"Server2"="DB3"}作為參數傳遞給我的azure Runbook。

您在庫中引用的腳本使用哈希表來指定子運行手冊的所有參數,而不是哈希表類型的單個參數。 因此,子Runbook可能具有如下的param塊:

workflow start-update-vm
{
param ($VMName, $retries)
#rest of code
}

但是,您可以采用字符串形式的json輸入,並將其轉換為哈希表/數組,如下所述: http : //blogs.technet.com/b/orchestrator/archive/2014/01/10/sma-capabilities-深入運行本輸入輸出和嵌套運行本.aspx

在運行手冊中,應將參數定義為[對象]類型,而不是[哈希表]。 您是通過Azure自動化門戶啟動運行手冊,還是通過另一個運行手冊內聯?

假設這是您的Runbook:

workflow a {
    param(
       [object] $obj
    )

    $obj
}

如果通過門戶網站,則需要將對象參數指定為JSON,例如:

{"server":"database","server2":"database_b"}

如果通過內聯調用該運行手冊的運行手冊,則將其指定為PowerShell對象或哈希表:

a -Obj @{"server"="database";"server2"="database_b"}

有關更多信息,請參見http://azure.microsoft.com/blog/2014/08/12/azure-automation-runbook-input-output-and-nested-runbooks/

編輯:如果您嘗試通過在運行本中調用Start-ChildRunbook運行本來專門啟動該運行本,則它看起來像這樣,因為Start-ChildRunbook運行本將運行本的參數作為哈希表啟動,在這種情況下這些參數之一的值是哈希表/對象本身:

$ValueForObjParam = @{"server"="database";"server2"="database_b"}

Start-ChildRunbook ` 
    -ChildRunbookName "a" ` 
    -ChildRunbookInputParams @{"obj"=$ValueForObjParam} ` 
    -AzureConnectionName "Visual Studio Ultimate with MSDN" `
    -AutomationAccountName "Contoso IT Automation Production" ` 
    -WaitForJobCompletion $true ` 
    -ReturnJobOutput $true ` 
    -JobPollingIntervalInSeconds 20 ` 
    -JobPollingTimeoutInSeconds 120 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM