0

別の Runbook から Runbook を呼び出し、Azure Automation の出力としてカスタム オブジェクトを取得する必要があります。呼び出された runbook が int または string を返すが、カスタム オブジェクトを返すことができない場合は正常に動作します。呼び出された runbook の簡単な例は次のとおりです。

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

この Runbook は 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 Automation の Runbook ジョブの各出力レコードは、型に関係なく、常に文字列として格納されます。出力されるオブジェクトが文字列でない場合は、文字列としてシリアル化されます。このオブジェクトは文字列に正しくシリアル化されていないように見えるため、Azure Automation はその文字列バージョンをジョブ出力として保存していません。

これを回避するには、2 つのランブック間でオブジェクトを自分でシリアル化/逆シリアル化することをお勧めします。CalledRunbook 内のオブジェクトに対して ConvertTo-Json を使用し、その結果を出力します。これにより、オブジェクトが JSON 文字列として出力されます。次に、CallingRunbook で、CalledRunbook の出力に対して ConvertFrom-Json を呼び出して、元のオブジェクトを取得します。

于 2015-06-15T18:08:46.150 に答える