Azure Automation で Runbook を管理する

Azure Automation には、新しい Runbook を作成するか、ファイルまたは Runbook ギャラリーから既存の Runbook をインポートすることによって Runbook を追加することができます。 この記事では、Runbook の管理に関する情報と、Runbook の設計に関する推奨パターンとベスト プラクティスについて説明します。 コミュニティによって提供されている Runbook やモジュールの利用について詳しくは、Azure Automation 用の Runbook ギャラリーとモジュール ギャラリーに関するページを参照してください。

Runbook を作成する

Azure portal または PowerShell を使用して、Azure Automation に新しい Runbook を作成します。 作成した Runbook は、次の情報を使用して編集できます。

Azure portal で Runbook を作成する

  1. Azure portal にサインインします。
  2. Automation アカウントを検索して選択します。
  3. [Automation アカウント] ページで、一覧からお使いの Automation アカウントを選択します。
  4. Automation アカウントで [プロセス オートメーション][Runbook] を選択し、Runbook の一覧を開きます。
  5. [Runbook の作成] をクリックします。
    1. Runbook に名前を付けます。
    2. [Runbook の種類] ドロップダウンから 種類を選択します。 Runbook 名は、先頭を英字にする必要があり、英字、数字、アンダースコア、ダッシュを使用できます
    3. [ランタイム バージョン] を選択します
    4. 該当する [説明] を入力します
  6. [作成] をクリックして、Runbook を作成します。

PowerShell で Runbook を作成する

空の Runbook を作成するには、New-AzAutomationRunbook コマンドレットを使用します。 Type パラメーターを使用して、New-AzAutomationRunbook に対して定義されている Runbook の種類の 1 つを指定します。

次の例は、新しい空の Runbook を作成する方法を示しています。

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'NewRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
}
New-AzAutomationRunbook @params

Runbook をインポートする

PowerShell または PowerShell ワークフロー (.ps1) スクリプト、グラフィカル Runbook (.graphrunbook)、Python 2 または Python 3 スクリプト (.py) をインポートして独自の Runbook を作成することができます。 インポート時に作成される Runbook の種類を指定します。その際、次のことを考慮します。

  • ワークフローが含まれていない .ps1 ファイルは、PowerShell Runbook または PowerShell ワークフロー Runbook のどちらにもインポートすることができます。 それを PowerShell ワークフロー Runbook にインポートすると、ワークフローに変換されます。 この場合、Runbook には、加えられた変更を説明するコメントが追加されます。

  • PowerShell ワークフローを含む .ps1 ファイルは、PowerShell ワークフロー Runbook にのみインポートできます。 ファイルに複数の PowerShell ワークフローが含まれている場合、インポートは失敗します。 各ワークフローを個別のファイルに保存し、それぞれを個別にインポートする必要があります。

  • PowerShell ワークフローを含む .ps1 ファイルは PowerShell スクリプト エンジンでは認識できないため、PowerShell Runbook にインポートしないでください。

  • .graphrunbook ファイルは、新しいグラフィカル Runbook にのみインポートします。

Azure portal から Runbook をインポートする

次の手順を使用して、スクリプト ファイルを Azure Automation にインポートできます。

Note

このポータルを使用して PowerShell ワークフロー Runbook にインポートできるのは .ps1 ファイルだけです。

  1. Azure portal で [Automation アカウント] を検索して選択します。
  2. [Automation アカウント] ページで、一覧からお使いの Automation アカウントを選択します。
  3. Automation アカウントで [プロセス オートメーション][Runbook] を選択し、Runbook の一覧を開きます。
  4. [Runbook のインポート] をクリックします。 次のいずれかのオプションを選択することができます。
    1. [ファイルの参照] - ローカル コンピューターからファイルを選択します。
    2. [ギャラリーで参照] - ギャラリーから既存の Runbook を参照して選択できます。
  5. ファイルを選択します。
  6. [名前] フィールドが有効になっている場合は、必要に応じて Runbook 名を変更することができます。 名前は文字で始める必要があり、文字、数字、アンダースコア、およびダッシュを含めることができます。
  7. [Runbook の種類] は自動的に設定されますが、該当する制限を考慮して種類を変更することもできます。
  8. [ランタイム バージョン] は、自動的に設定されるか、またはドロップダウン リストからバージョンを選択します。
  9. [インポート] をクリックします。 新しい Runbook は、自動化アカウントの Runbook のリストに表示されます。
  10. Runbook を実行する前に、Runbook を公開する必要があります。

Note

グラフィカル Runbook は、インポート後、他の種類に変換することができます。 ただし、グラフィカル Runbook をテキスト形式の Runbook に変換することはできません。

PowerShell で Runbook をインポートする

Runbook のドラフトとしてスクリプト ファイルをインポートするには、Import-AzAutomationRunbook コマンドレットを使用します。 Runbook が既に存在する場合、コマンドレットで Force パラメーターを使用しないと、インポートは失敗します。

次の例では、スクリプト ファイルを Runbook にインポートする方法を示します。

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'Sample_TestRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
    Path                  = 'C:\Runbooks\Sample_TestRunbook.ps1'
}
Import-AzAutomationRunbook @params

リソースを処理する

Runbook でリソースを作成する場合、リソースの作成を試みる前に、リソースが既に存在するかどうかをスクリプトで確認する必要があります。 基本的な例を次に示します。

$vmName = 'WindowsVM1'
$rgName = 'MyResourceGroup'
$myCred = Get-AutomationPSCredential 'MyCredential'

$vmExists = Get-AzResource -Name $vmName -ResourceGroupName $rgName
if (-not $vmExists) {
    Write-Output "VM $vmName does not exist, creating"
    New-AzVM -Name $vmName -ResourceGroupName $rgName -Credential $myCred
} else {
    Write-Output "VM $vmName already exists, skipping"
}

アクティビティ ログから詳細を取得する

Runbook を開始したユーザーやアカウントなど、Runbook に関する詳細を、Automation アカウントのアクティビティ ログから取得できます。 次の PowerShell の例では、指定した Runbook を最後に実行したユーザーが提供されます。

$rgName = 'MyResourceGroup'
$accountName = 'MyAutomationAccount'
$runbookName = 'MyRunbook'
$startTime = (Get-Date).AddDays(-1)

$params = @{
    ResourceGroupName = $rgName
    StartTime         = $startTime
}
$JobActivityLogs = (Get-AzLog @params).Where( { $_.Authorization.Action -eq 'Microsoft.Automation/automationAccounts/jobs/write' })

$JobInfo = @{}
foreach ($log in $JobActivityLogs) {
    # Get job resource
    $JobResource = Get-AzResource -ResourceId $log.ResourceId

    if ($null -eq $JobInfo[$log.SubmissionTimestamp] -and $JobResource.Properties.Runbook.Name -eq $runbookName) {
        # Get runbook
        $jobParams = @{
            ResourceGroupName     = $rgName
            AutomationAccountName = $accountName
            Id                    = $JobResource.Properties.JobId
        }
        $Runbook = Get-AzAutomationJob @jobParams | Where-Object RunbookName -EQ $runbookName

        # Add job information to hashtable
        $JobInfo.Add($log.SubmissionTimestamp, @($Runbook.RunbookName, $Log.Caller, $JobResource.Properties.jobId))
    }
}
$JobInfo.GetEnumerator() | Sort-Object Key -Descending | Select-Object -First 1

進行状況の追跡

簡単に再利用や再起動ができるロジックを使用したモジュールの形式で Runbook を作成することをお勧めします。 問題が発生しても、Runbook の進行状況が追跡されていれば、Runbook のロジックを正常に実行することができます。

Runbook の進行状況は、ストレージ アカウント、データベース、ファイル共有などの外部ソースを使用して追跡できます。 最後に実行されたアクションの状態をまずチェックするロジックを、Runbook に作成します。 その後、チェックの結果に基づいて、Runbook 内の特定のタスクをスキップまたは続行できます。

同時実行ジョブの防止

一部の Runbook は、同時に複数のジョブで実行されると、おかしな動作をすることがあります。 この場合は、既に実行中のジョブがあるかどうかをチェックするロジックを Runbook に実装することが重要です。 基本的な例を次に示します。

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity 
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context 
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

# Check for already running or new runbooks 
$runbookName = "runbookName" 
$resourceGroupName = "resourceGroupName" 
$automationAccountName = "automationAccountName"

$jobs = Get-AzAutomationJob -ResourceGroupName $resourceGroupName -AutomationAccountName $automationAccountName -RunbookName $runbookName -DefaultProfile $AzureContext

# Ranking all the active jobs
$activeJobs = $jobs | where {$_.status -eq 'Running' -or $_.status -eq 'Queued' -or $_.status -eq 'New' -or $_.status -eq 'Activating' -or $_.status -eq 'Resuming'} | Sort-Object -Property CreationTime 
$jobRanking = @() 
$rank = 0 
ForEach($activeJob in $activeJobs) 
{         
    $rank = $rank + 1 
    $activeJob | Add-Member -MemberType NoteProperty -Name jobRanking -Value $rank -Force 
    $jobRanking += $activeJob 
}
    
$AutomationJobId = $PSPrivateMetadata.JobId.Guid 
$currentJob = $activeJobs | where {$_.JobId -eq $AutomationJobId} 
$currentJobRank = $currentJob.jobRanking 

# Only allow the Job with Rank = 1 to start processing. 
If($currentJobRank -ne "1") 
{ 
    Write-Output "$(Get-Date -Format yyyy-MM-dd-hh-mm-ss.ffff) Concurrency check failed as Current Job Ranking is not 1 but $($currentJobRank) therefore exiting..." 
    Exit 
} Else
{
    Write-Output "$(Get-Date -Format yyyy-MM-dd-hh-mm-ss.ffff) Concurrency check passed. Start processing.." 
} 

Runbook をシステム割り当てマネージド ID で実行する場合は、コードをそのままにしておきます。 ユーザー割り当てマネージド ID を使用する場合は、次のようにします。

  1. 5 行目から、$AzureContext = (Connect-AzAccount -Identity).context を削除し、
  2. それを $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context に置き換えた後、
  3. クライアント ID を入力します。

Note

PowerShell 7.2 ハイブリッド ジョブの場合、28 行目で変更を行います。 $PSPrivateMetadata.JobId.Guid$env:PSPrivateMetaDataに置き換えます。

時間に依存するスクリプトの一時的なエラーを処理する

Runbook は堅牢であること、そして再起動や失敗を引き起こす可能性のあるエラー (一時的なエラーを含む) を処理できることが必要です。 Runbook が失敗した場合、Azure Automation によって再試行されます。

Runbook が時間制約内で普通に実行される場合は、スクリプトで実行時間をチェックするロジックを実装します。 このチェックにより、特定の時間帯にのみ、起動、シャットダウン、スケールアウトなどの操作が実行されることが保証されます。

Note

Azure サンドボックス プロセス上のローカル時刻は UTC に設定されます。 Runbook での日付と時刻の計算では、この事実を考慮する必要があります。

Runbook でロジックを再試行し、一時的なエラーを回避する

Runbook は、ARM、Azure Resource Graph、SQL サービス、その他の Web サービスを介して、Azure などのリモート システムを呼び出すことがよくあります。 Runbook が呼び出しているそのシステムがビジー状態である、一時的に使用できない、または負荷時に調整を実装している場合、その呼び出しでランタイム エラーが発生することがあります。 Runbook 内に回復性を構築するには、Runbook が失敗することなく一時的な問題を処理できるように、呼び出しを行う際の再試行ロジックを実装する必要があります。

詳しくは、「再試行パターン」と「一般的な REST および再試行のガイドライン」をご参照ください。

例 1: Runbook が 1 つまたは 2 つの呼び出しのみを行う場合

$searchServiceURL = "https://$searchServiceName.search.windows.net"
$resource = Get-AzureRmResource -ResourceType "Microsoft.Search/searchServices" -ResourceGroupName $searchResourceGroupName -ResourceName  $searchServiceName -ApiVersion 2015-08-19
$searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey

Invoke-AzureRmResourceAction を呼び出すと、一時的な失敗が発生する場合があります。 そのようなシナリオでは、そのコマンドレットの呼び出しに関する次の基本パターンを実装することをお勧めします。

$searchServiceURL = "https://$searchServiceName.search.windows.net"
$resource = Get-AzureRmResource -ResourceType "Microsoft.Search/searchServices" -ResourceGroupName $searchResourceGroupName -ResourceName  $searchServiceName -ApiVersion 2015-08-19

    # Adding in a retry
    $Stoploop = $false
    $Retrycount = 0
 
    do {
        try   {
               $searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey
               write-verbose "Invoke-AzureRmResourceAction on $resource.ResourceId completed"
               $Stoploop = $true
              }
        catch {
               if ($Retrycount -gt 3)
                 {
                  Write-verbose "Could not Invoke-AzureRmResourceAction on $resource.ResourceId after 3 retrys."
                  $Stoploop = $true
                 }
               else  
                 {
                  Write-verbose "Could not Invoke-AzureRmResourceAction on $resource.ResourceId retrying in 30 seconds..."
                  Start-Sleep -Seconds 30
                  $Retrycount = $Retrycount + 1
                 }
               }
        }
    While ($Stoploop -eq $false)

Note

最大 3 回の再試行がその呼び出しに対して実行され、毎回 30 秒間スリープ状態になります。

例 2: Runbook が頻繁にリモート呼び出しを行っている場合

Runbook が頻繁にリモート呼び出しを行っている場合は、一時的なランタイムの問題が発生することがあります。 実行される呼び出しごとに再試行ロジックを実装し、スクリプト ブロックとして実行されるその呼び出しを渡して実行する関数を作成します。

Function ResilientRemoteCall {

         param(
               $scriptblock
               )
        
         $Stoploop = $false
         $Retrycount = 0
 
         do {
             try   {
                    Invoke-Command -scriptblock $scriptblock 
                    write-verbose "Invoked $scriptblock completed"
                    $Stoploop = $true
                   }
             catch {
                    if ($Retrycount -gt 3)
                      {
                       Write-verbose "Invoked $scriptblock failed 3 times and we will not try again."
                       $Stoploop = $true
                      }
                    else  
                      {
                       Write-verbose "Invoked $scriptblock failed  retrying in 30 seconds..."
                       Start-Sleep -Seconds 30
                       $Retrycount = $Retrycount + 1
                      }
                    }
             }
         While ($Stoploop -eq $false)
}

その後、各リモート呼び出しを次のように関数に渡すことができます。

ResilientRemoteCall { Get-AzVm } または

ResilientRemoteCall { $searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey}

複数のサブスクリプションの操作

Runbook は、サブスクリプションを操作できることが必要です。 たとえば、複数のサブスクリプションを処理するために、Runbook には Disable-AzContextAutosave コマンドレットが使用されます。 このコマンドレットを使用するのは、同じサンドボックスで実行されている別の Runbook から認証コンテキストが取得されないようにするためです。

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription `
    -DefaultProfile $AzureContext

$childRunbookName = 'childRunbookDemo'
$resourceGroupName = "resourceGroupName"
$automationAccountName = "automationAccountName"

$startParams = @{
    ResourceGroupName     = $resourceGroupName
    AutomationAccountName = $automationAccountName
    Name                  = $childRunbookName
    DefaultProfile        = $AzureContext
}
Start-AzAutomationRunbook @startParams

Runbook をシステム割り当てマネージド ID で実行する場合は、コードをそのままにしておきます。 ユーザー割り当てマネージド ID を使用する場合は、次のようにします。

  1. 5 行目から、$AzureContext = (Connect-AzAccount -Identity).context を削除し、
  2. それを $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context に置き換えた後、
  3. クライアント ID を入力します。

カスタム スクリプトを使用する

Note

通常、Log Analytics エージェントがインストールされているホストでカスタム スクリプトと Runbook を実行することはできません。

カスタム スクリプトを使用するには、次の手順に従います。

  1. Automation アカウントを作成します。
  2. Hybrid Runbook Worker ロールを展開します。
  3. Linux コンピューターでは通常より高い権限が必要です。 サインインして署名の確認を無効にします

Runbook をテストする

Runbook のテスト時には ドラフト バージョン が実行され、そのバージョンで行われるすべてのアクションが完了します。 ジョブ履歴は作成されませんが、[テスト出力] ペインに出力および警告とエラーのストリームが表示されます。 VerbosePreference 変数が Continue に設定されている場合のみ、詳細ストリームに対するメッセージが [出力] ペインに表示されます。

ドラフト バージョンを実行している場合も、Runbook は通常どおり実行され、環境中のリソースに対するすべての操作が実行されます。 このため、Runbook をテストするのは非運用環境のリソースのみにしてください。

Note

すべての Runbook 実行アクションは、操作名が [Azure Automation ジョブの作成] の Automation アカウントのアクティビティ ログに記録されます。 ただし、Runbook のドラフト バージョンが実行されるテスト ペインでの Runbook の実行は、操作名 [Azure Automation Runbook ドラフトを書き込む] でアクティビティ ログに記録されます。 [操作][JSON] タブを選択し、../runbooks/(runbook name)/draft/testjob で終わるスコープを参照します。

Runbook の各種類をテストする手順はいずれも同じです。 Azure portal のテキスト エディターとグラフィカル エディターではテスト方法に違いはありません。

  1. テキスト エディターまたはグラフィカル エディターのどちらかで、ドラフト バージョンの Runbook を開きます。
  2. [テスト] をクリックして [テスト] ページを開きます。
  3. Runbook にパラメーターがある場合は左ペインに表示され、そこでテストに使用する値を指定することができます。
  4. Hybrid Runbook Worker に対してテストを実施する場合は、[実行設定][ハイブリッド worker] に変更してターゲット グループの名前を選択します。 それ以外の場合は、既定の [Azure] をそのまま使用してクラウドでテストを実行します。
  5. [開始] をクリックしてテストを開始します。
  6. テスト中の Powershell Workflow およびグラフィカル Runbook は、[出力] ペインのボタンで停止および一時停止できます。 Runbook は、中断される場合は中断前に現在のアクティビティを完了します。 Runbook を中断した後で、停止または再開できます。
  7. [出力] ペインで Runbook の出力を調べます。

Runbook を発行する

新しく作成またはインポートした Runbook は、実行する前に発行しておく必要があります。 Azure Automation の各 Runbook には、ドラフト バージョンと発行バージョンがあります。 実行できるのは発行バージョンのみで、編集できるのはドラフト バージョンのみです。 ドラフト バージョンを変更しても発行バージョンに影響はありません。 ドラフト バージョンを使用できるようにする必要がある場合は、それを発行します。これにより、現在発行されているバージョンがドラフト バージョンで上書きされます。

Azure portal で Runbook を発行する

  1. Azure portal で [Automation アカウント] を検索して選択します。
  2. [Automation アカウント] ページで、一覧からお使いの Automation アカウントを選択します。
  3. お使いの Automation アカウントで Runbook を開きます。
  4. [編集] をクリックします。
  5. [発行] をクリックしてから、確認メッセージに対して [はい] を選択します。

PowerShell を使用して Runbook を発行する

Publish-AzAutomationRunbook コマンドレットを使用して Runbook を発行します。

$accountName = "MyAutomationAccount"
$runbookName = "Sample_TestRunbook"
$rgName = "MyResourceGroup"

$publishParams = @{
    AutomationAccountName = $accountName
    ResourceGroupName     = $rgName
    Name                  = $runbookName
}
Publish-AzAutomationRunbook @publishParams

Azure portal で Runbook をスケジュールする

Runbook が発行済みであるときに、操作のスケジュールを設定できます。

  1. Azure portal で [Automation アカウント] を検索して選択します。
  2. [Automation アカウント] ページで、一覧からお使いの Automation アカウントを選択します。
  3. Runbook の一覧から Runbook を選択します。
  4. [リソース] の下の [スケジュール] を選択します。
  5. [スケジュールの追加] を選択します。
  6. [Runbook のスケジュール設定] ウィンドウで、[スケジュールを Runbook にリンクします] を選択します。
  7. [スケジュール] ウィンドウで、[新しいスケジュールを作成します] を選択します。
  8. [新しいスケジュール] ウィンドウで、名前、説明、その他のパラメーターを入力します。
  9. スケジュールを作成したら、それを強調表示し、[OK] をクリックします。 これで、Runbook にリンクされるようになります。
  10. メールボックスの電子メールで、Runbook の状態通知を探します。

削除した Runbook を復元する

PowerShell スクリプトを使用して、削除した Runbook を復旧することができます。 Runbook を復旧するには、次の条件が満たされていることを確認します。

  • 復元する Runbook が過去 29 日間に削除されていること。
  • その Runbook の Automation アカウントが存在すること。
  • Automation アカウントのシステム割り当てマネージド ID に Automation 共同作成者のロール権限が付与されていること。

PowerShell スクリプト

  • Automation アカウントで PowerShell スクリプトをジョブとして実行し、削除された Runbook を復元します。
  • GitHub から PowerShell スクリプトをダウンロードします。 または、Runbook ギャラリーから "Automation Runbook の復元" という PowerShell スクリプトをインポートします。 復元する Runbook の名前を指定し、Azure Automation でジョブとして実行して、削除された Runbook を復元します。
  • GitHub からスクリプトをダウンロードするか、Runbook ギャラリーから "削除した Automation Runbook の一覧表示" という PowerShell スクリプトをインポートして、過去 29 日間に削除された Runbook の名前を識別します。

ジョブの状態を取得する

Azure portal で状態を表示する

Azure Automation におけるジョブの処理について詳しくは、「ジョブ」を参照してください。 Runbook ジョブを見る準備が整ったら、Azure portal を使用して Automation アカウントにアクセスします。 右側にある [ジョブの統計情報] で、すべての Runbook ジョブの概要を確認できます。

[ジョブの統計情報] タイル

概要では、実行された各ジョブの数を確認できるほか、その状態がグラフィカルに表示されます。

タイルをクリックすると、実行されたすべてのジョブの概要を示す一覧が含まれた [ジョブ] ページが表示されます。 このページには、各ジョブの状態、Runbook 名、開始時刻、完了時間が表示されます。

[ジョブ] ページのスクリーンショット。

[ジョブのフィルター] を選択すると、ジョブの一覧をフィルター処理すできます。 特定の Runbook、ジョブの状態、またはドロップダウン リストから選択したものでフィルター処理し、検索の時間範囲を指定します。

ジョブの状態でフィルター処理する

また、Automation アカウントの [Runbook] ページで Runbook を選択してから、[ジョブ] を選択することで、特定の Runbook のジョブ概要の詳細を表示することができます。 この操作により、[ジョブ] ページが表示されます。 ここから、ジョブ レコードをクリックして、その詳細と出力を表示できます。

[エラー] ボタンが強調表示された [ジョブ] ページのスクリーンショット。

PowerShell を使用してジョブの状態を取得する

Runbook 用に作成されたジョブと、特定のジョブの詳細を取得するには、Get-AzAutomationJob コマンドレットを使用します。 Start-AzAutomationRunbook を使用して Runbook を開始すると、結果として作成されたジョブが返されます。 ジョブの出力を取得するには Get-AzAutomationJobOutput を使用します。

次の例では、サンプル Runbook の最後のジョブが取得されて、その状態、Runbook パラメーターに指定された値、およびジョブの出力が表示されます。

$getJobParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Runbookname           = 'Test-Runbook'
}
$job = (Get-AzAutomationJob @getJobParams | Sort-Object LastModifiedDate -Desc)[0]
$job | Select-Object JobId, Status, JobParameters

$getOutputParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Id                    = $job.JobId
    Stream                = 'Output'
}
Get-AzAutomationJobOutput @getOutputParams

次の例では、特定のジョブの出力が取得されて、各レコードが返されます。 いずれかのレコードで例外が発生した場合、スクリプトでは値ではなく例外が書き出されます。 この動作は役に立ちます。出力時に通常はログに記録されない追加情報が、例外によって提供される可能性があるためです。

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Stream                = 'Any'
}
$output = Get-AzAutomationJobOutput @params

foreach ($item in $output) {
    $jobOutParams = @{
        AutomationAccountName = 'MyAutomationAccount'
        ResourceGroupName     = 'MyResourceGroup'
        Id                    = $item.StreamRecordId
    }
    $fullRecord = Get-AzAutomationJobOutputRecord @jobOutParams

    if ($fullRecord.Type -eq 'Error') {
        $fullRecord.Value.Exception
    } else {
        $fullRecord.Value
    }
}

次のステップ