我试图将{"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 ......有什么想法吗?
答案 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"}
编辑:如果您试图通过在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