Microsoft Azure(自动化):Runbook将Hash作为参数传递

时间:2014-12-01 14:09:41

标签: powershell azure hash parameters

我试图将{"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 ......有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您在库中引用的脚本使用哈希表来指定子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-in-depth-runbook-input-output-and-nested-runbooks.aspx

答案 1 :(得分:0)

在Runbook中,您应该将参数定义为[object]类型,而不是[hashtable]。您是通过Azure自动化门户启动Runbook,还是通过其他Runbook内联?

假设这是你的Runbook:

workflow a {
    param(
       [object] $obj
    )

    $obj
}

如果通过门户网站,则需要将对象参数指定为JSON,例如:

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

如果通过Runbook调用此Runbook内联,请将其指定为PowerShell对象或哈希表:

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

有关详细信息,请参阅http://azure.microsoft.com/blog/2014/08/12/azure-automation-runbook-input-output-and-nested-runbooks/

编辑:如果您试图通过在Runbook中调用Start-ChildRunbook Runbook来专门启动此Runbook,它将看起来像这样,因为Start-ChildRunbook Runbook将Runbook的参数作为哈希表启动,并且在这种情况下,其中一个参数的值是一个哈希表/对象本身:

$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