我需要从另一个Runbook调用Runbook并在azure自动化中获取自定义对象作为输出。它工作正常如果被调用的Runbook返回int或string但是无法返回自定义对象。被调用的Runbook的一个简单示例是
workflow CalledRunbook
{
[OutputType([Object])]
$obj1=@{"key1"="value1"}
$obj1
}
现在从CallingRunbook中调用此Runbook,我需要打印此obj1
workflow CallingRunbook
{
#After doing proper authentication
$job = Start-AzureAutomationRunbook -Name "CalledRunbook" -AutomationAccountName $AutomationAccountName
$doLoop = $true
while($doLoop) {
Start-Sleep -s 5
$job = Get-AzureAutomationJob -Id $job.Id -AutomationAccountName $AutomationAccountName
$doLoop = (($job.Status -notmatch "Completed") -and ($job.Status -notmatch "Failed") -and ($job.Status -notmatch "Suspended") -and ($job.Status -notmatch "Stopped"))
}
$jobout = Get-AzureAutomationJobOutput `
-Id $job.Id `
-AutomationAccountName $AutomationAccountName `
-Stream Output
if ($jobout) {
Write-Output $jobout
}
}
输出为空。如果我返回一个完全正常的字符串。如何使它与自定义对象一起使用?
答案 0 :(得分:4)
Azure Automation中的Runbook作业的每个输出记录始终存储为字符串,而不管其类型如何。如果输出的对象不是字符串,则将其序列化为字符串。看来此对象未正确序列化为字符串,因此Azure Automation不会将其字符串版本存储为作业输出。
要解决此问题,我的建议是在两个Runbook之间自行序列化/反序列化对象。在CalledRunbook中的对象上使用ConvertTo-Json,并输出结果。这将输出对象作为JSON字符串。然后,在CallingRunbook中,在CalledRunbook的输出上调用ConvertFrom-Json,以恢复原始对象。