0

我需要从另一个 Runbook 调用一个 Runbook,并在 azure automation 中获取一个自定义对象作为输出。如果被调用的 runbook 返回 int 或 string 但无法返回自定义对象,则工作正常。被调用的 runbook 的简单示例是

     workflow CalledRunbook 
     {
        [OutputType([Object])]
        $obj1=@{"key1"="value1"}
        $obj1
     } 

现在这个运行手册是从 CallingRunbook 调用的,我需要打印这个 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
        }
    }

输出为空。如果我返回一个字符串,那工作得很好。如何使其与自定义对象一起使用?

4

1 回答 1

5

Azure 自动化中 Runbook 作业的每个输出记录始终存储为字符串,无论其类型如何。如果输出的对象不是字符串,则将其序列化为字符串。此对象似乎未正确序列化为字符串,因此 Azure 自动化不会将其字符串版本存储为作业输出。

要解决此问题,我的建议是在两个 Runbook 之间自行序列化/反序列化对象。在 CalledRunbook 中的对象上使用 ConvertTo-Json,并输出结果。这会将对象输出为 JSON 字符串。然后,在 CallingRunbook 中,对 CalledRunbook 的输出调用 ConvertFrom-Json,以取回原始对象。

于 2015-06-15T18:08:46.150 回答