Azure AutomationのPowerShell 7.6ランブックでAzure CLIを実行する方法

Azure AutomationのPowerShell 7.6ランブックからAzure CLI(azコマンド)を実行するには、PowerShell 7.6のRuntime Environmentを作成し、ランブックを関連付けたうえで、マネージドIDを使ってaz login --identityを実行します。対象リソースへのRBACロールも付与しておけば、ユーザー名やパスワード、クライアントシークレットをコードに埋め込まずにAzureリソースを自動操作できます。

Microsoftは2026年7月30日、Azure Update 568102として、PowerShell 7.6ランブック、Runtime Environment、PowerShell 7.6ランブック内でのAzure CLIコマンド実行を一般提供しました。PowerShell処理とAzure CLIを1つのランブックにまとめられるため、既存のazベースの運用スクリプトをAzure Automationへ移行しやすくなります。

なお、2026年8月5日時点では、Microsoft LearnのAzure CLIクイックスタートにPowerShell 7.4とAzure CLI 2.64.0の記載が残っています。基本的な作成手順は同じですが、実際の設定ではRuntime versionを7.6に読み替え、Azure CLIのバージョンはAzure portalとaz versionの実行結果で確認してください。(Microsoft Learn)

目次

PowerShell 7.6ランブックのAzure CLI対応で何が変わったのか

今回の一般提供で重要なのは、単にPowerShell 7.6が選べるようになったことだけではありません。Azure AutomationのRuntime EnvironmentにAzure CLIを含め、PowerShellスクリプトの途中からネイティブコマンドとしてazを呼び出せるようになりました。

項目内容
発表日2026年7月30日
Azure Update ID568102
提供状態一般提供(GA)
対象PowerShell 7.6ランブック
実行できる処理Azure CLIのazコマンド
実行環境の管理単位Runtime Environment
推奨認証マネージドID
主な用途Azureリソースの一覧取得、作成、更新、起動、停止、設定変更

PowerShell 7.6は、Azure AutomationのすべてのPublicリージョンで一般提供されたと案内されています。一方、Government cloudについては同じ案内の対象に含まれていないため、利用環境ごとにAzure portalで選択可否を確認する必要があります。(Microsoft Learn)

Runtime Environmentには、実行言語、言語バージョン、必要なパッケージがまとめて定義されます。1つのランブックには1つのRuntime Environmentを関連付け、1つのRuntime Environmentは複数のランブックで共有できます。(Microsoft Learn)

Azure CLIを使うと効果が大きいケース

Azure PowerShellだけで処理できる場合でも、次のようなケースではAzure CLIを利用する価値があります。

  • 既存の運用手順やシェルスクリプトがazコマンドで作られている
  • Azure CLI向けのサンプルコードをそのまま活用したい
  • JMESPathの--queryで取得結果を絞り込みたい
  • PowerShell、Bash、ローカル端末で同じAzure CLIコマンドを共通利用したい
  • Az PowerShellよりAzure CLI側で先に提供されたオプションを利用したい
  • 複数のazコマンドをPowerShellの条件分岐や例外処理と組み合わせたい

すべてをAzure CLIへ置き換える必要はありません。オブジェクトをPowerShellパイプラインで処理する部分はAz PowerShell、既存のコマンド資産を再利用したい部分はAzure CLIというように使い分けられます。

実行前に準備するもの

PowerShell 7.6ランブックからAzure CLIを実行する前に、次の項目を確認します。

準備項目確認内容
AutomationアカウントAzure Automationアカウントが作成済みである
Runtime EnvironmentPowerShell 7.6を選択できる
Azure CLIパッケージPackages画面にAzure CLIが表示される
マネージドIDシステム割り当て、またはユーザー割り当てIDを利用できる
RBAC操作対象に必要最小限のAzureロールを付与する
対象情報サブスクリプションID、リソースグループ名などを把握している
実行先まずは「Azure」のクラウドジョブでテストする

Azure Automationでは、資格情報の作成やローテーションが不要なマネージドIDが、ランブックの推奨認証方式です。ユーザー割り当てマネージドIDはクラウドジョブで利用でき、システム割り当てマネージドIDはAutomationアカウントに直接ひも付きます。(Microsoft Learn)

Azure AutomationのPowerShell 7.6ランブックでazコマンドを実行する方法

AutomationアカウントのマネージドIDを有効にする

初めて構成する場合は、システム割り当てマネージドIDが分かりやすい選択です。

  1. Azure portalで対象のAutomationアカウントを開きます。
  2. 左側メニューの「アカウント設定」から「ID」を開きます。
  3. 「システム割り当て」を「オン」にします。
  4. 「保存」を選択します。
  5. 表示されたオブジェクトIDを確認します。

有効化すると、Automationアカウントと同じ名前のサービスプリンシパルがMicrosoft Entra IDに作成されます。(Microsoft Learn)

操作対象にRBACロールを付与する

マネージドIDを有効にしただけでは、Azureリソースを読み書きできません。操作対象のサブスクリプション、リソースグループ、または個別リソースでロールを割り当てます。

動作確認としてリソース一覧を取得するだけなら、対象リソースグループに「閲覧者」を付与します。

  1. 操作対象のリソースグループを開きます。
  2. 「アクセス制御(IAM)」を開きます。
  3. 「ロールの割り当ての追加」を選択します。
  4. 「閲覧者」など、処理に必要なロールを選びます。
  5. メンバーの種類で「マネージドID」を選択します。
  6. 対象のAutomationアカウントを指定します。
  7. 設定を確認して割り当てます。

仮想マシンの起動や停止、ストレージへの書き込みなどを行う場合は、それぞれの操作に必要なロールへ変更します。動作確認のためだけに、サブスクリプション全体へ「共同作成者」を付与するのは避けてください。

ロールを割り当てる側のユーザーには、OwnerやUser Access Administratorなど、ロール割り当てを書き込める権限が必要です。また、割り当て直後は反映まで時間がかかる場合があります。(Microsoft Learn)

PowerShell 7.6のRuntime Environmentを作成する

続いて、Azure CLIを実行するためのRuntime Environmentを作成します。

  1. Automationアカウントを開きます。
  2. 必要に応じて、概要画面の「Runtime Environmentエクスペリエンスを試す」を選択します。
  3. 「プロセス オートメーション」から「Runtime Environments」を開きます。
  4. 「作成」を選択します。
  5. 名前にps76-azcli-testなどを入力します。
  6. Languageで「PowerShell」を選択します。
  7. Runtime versionで「7.6」を選択します。
  8. Packages画面でAzとAzure CLIが表示されていることを確認します。
  9. 「確認と作成」からRuntime Environmentを作成します。

Microsoftのクイックスタートでは、PowerShellのRuntime Environment作成時にAzとAzure CLIの既定パッケージを確認する流れが示されています。公式ページに残っているPowerShell 7.4やAzure CLI 2.64.0という値は、そのままPowerShell 7.6の固定値として使わず、作成画面に表示される現在のバージョンを優先してください。(Microsoft Learn)

Azure Automationは、サポート対象となるAzure CLIの更新に追随する方針を示しています。そのため、特定のCLIバージョンだけで動く実装を避け、ジョブ内でaz versionを記録しておくと障害調査がしやすくなります。(Microsoft Learn)

PowerShellランブックを作成してRuntime Environmentを関連付ける

新しいランブックを作成する場合は、次の手順で進めます。

  1. Automationアカウントの「ランブック」を開きます。
  2. 「作成」を選択します。
  3. ランブック名を入力します。
  4. ランブックの種類で「PowerShell」を選択します。
  5. Runtime Environmentに、先ほど作成したps76-azcli-testを指定します。
  6. ランブックを作成します。

既存ランブックを移行する場合は、対象ランブックの「ポータルで編集」を開き、Runtime Environmentの選択欄からPowerShell 7.6環境へ変更します。その後、テストウィンドウで確認してから発行します。(Microsoft Learn)

最小構成のコードでAzure CLIをテストする

次のコードは、PowerShellとAzure CLIのバージョンを出力し、システム割り当てマネージドIDでログインした後、指定したリソースグループ内のAzureリソースを一覧表示します。

param(
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$SubscriptionId,

    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$ResourceGroupName
)

$ErrorActionPreference = 'Stop'

Write-Output "PowerShell version: $($PSVersionTable.PSVersion)"

# Azure CLIが利用できることを確認
$azVersionOutput = az version --output json --only-show-errors

if ($LASTEXITCODE -ne 0) {
    throw "Azure CLIを実行できません。Runtime Environmentのパッケージを確認してください。"
}

$azVersion = ($azVersionOutput -join "`n") | ConvertFrom-Json
Write-Output "Azure CLI version: $($azVersion.'azure-cli')"

# Automationアカウントのシステム割り当てマネージドIDでログイン
az login `
    --identity `
    --output none `
    --only-show-errors

if ($LASTEXITCODE -ne 0) {
    throw "マネージドIDを使ったAzure CLIへのログインに失敗しました。"
}

# 操作対象のサブスクリプションを明示
az account set `
    --subscription $SubscriptionId `
    --only-show-errors

if ($LASTEXITCODE -ne 0) {
    throw "サブスクリプションの選択に失敗しました。SubscriptionIdとRBACを確認してください。"
}

# 対象リソースグループ内のリソースを一覧表示
az resource list `
    --subscription $SubscriptionId `
    --resource-group $ResourceGroupName `
    --query "[].{Name:name,Type:type,Location:location}" `
    --output table `
    --only-show-errors

if ($LASTEXITCODE -ne 0) {
    throw "リソース一覧の取得に失敗しました。対象名とRBACを確認してください。"
}

システム割り当てマネージドIDではaz login --identityを使用します。ユーザー割り当てマネージドIDをクラウドジョブで利用する場合は、クライアントID、オブジェクトID、またはリソースIDを追加できます。(Microsoft Learn)

クライアントIDを指定する例は次のとおりです。

az login `
    --identity `
    --client-id $ManagedIdentityClientId `
    --output none `
    --only-show-errors

テストウィンドウで実行する

コードを保存したら、いきなり発行せずテストウィンドウで確認します。

  1. ランブック編集画面で「テストウィンドウ」を開きます。
  2. SubscriptionIdを入力します。
  3. ResourceGroupNameを入力します。
  4. 実行を開始します。
  5. PowerShell 7.6が表示されることを確認します。
  6. Azure CLIのバージョンが表示されることを確認します。
  7. 対象リソースの一覧が出力されることを確認します。
  8. 問題がなければ編集画面へ戻り、ランブックを発行します。

一覧取得に成功した時点で、Runtime Environment、Azure CLI、マネージドID、RBAC、サブスクリプション指定の基本構成が正しく動作しています。

実運用向けのエラー処理付きテンプレート

実運用では、azコマンドごとに$LASTEXITCODEを確認し、JSONをPowerShellオブジェクトへ変換すると扱いやすくなります。

次のテンプレートでは、Azure CLIの呼び出しを関数化しています。

param(
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$SubscriptionId,

    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$ResourceGroupName
)

$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'

function Invoke-AzureCli {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string[]]$Arguments,

        [switch]$AsJson
    )

    $nativeOutput = & az @Arguments 2>&1
    $exitCode = $LASTEXITCODE
    $text = ($nativeOutput -join [Environment]::NewLine).Trim()

    if ($exitCode -ne 0) {
        throw @"
Azure CLIの実行に失敗しました。
ExitCode: $exitCode
Command: az $($Arguments -join ' ')
Output:
$text
"@
    }

    if ($AsJson) {
        if ([string]::IsNullOrWhiteSpace($text)) {
            return $null
        }

        return $text | ConvertFrom-Json
    }

    return $text
}

Write-Output "PowerShell version: $($PSVersionTable.PSVersion)"

$cliVersion = Invoke-AzureCli `
    -Arguments @(
        'version',
        '--output', 'json',
        '--only-show-errors'
    ) `
    -AsJson

Write-Output "Azure CLI version: $($cliVersion.'azure-cli')"

Invoke-AzureCli `
    -Arguments @(
        'login',
        '--identity',
        '--output', 'none',
        '--only-show-errors'
    ) | Out-Null

Invoke-AzureCli `
    -Arguments @(
        'account',
        'set',
        '--subscription', $SubscriptionId,
        '--only-show-errors'
    ) | Out-Null

$resources = Invoke-AzureCli `
    -Arguments @(
        'resource',
        'list',
        '--subscription', $SubscriptionId,
        '--resource-group', $ResourceGroupName,
        '--query', '[].{Name:name,Type:type,Location:location}',
        '--output', 'json',
        '--only-show-errors'
    ) `
    -AsJson

$resources |
    Sort-Object Name |
    Select-Object Name, Type, Location

この形式には、次の利点があります。

  • Azure CLIの終了コードを必ず確認できる
  • エラーになったコマンドと出力をジョブログに残せる
  • JSONをPowerShellオブジェクトとして処理できる
  • 引数を配列として渡すため、空白や引用符の問題を減らせる
  • Invoke-Expressionを使わないため、パラメーター経由のコマンド注入を避けやすい
  • 別のazコマンドへ差し替えやすい

例えば、仮想マシンを起動する処理へ変更する場合は、必要なRBACを付与したうえで、次のように呼び出せます。

Invoke-AzureCli `
    -Arguments @(
        'vm',
        'start',
        '--subscription', $SubscriptionId,
        '--resource-group', $ResourceGroupName,
        '--name', $VmName,
        '--only-show-errors'
    ) | Out-Null

Az PowerShellとAzure CLIの認証は別に考える

PowerShellランブック内でAz PowerShellとAzure CLIを併用する場合、両者の認証コンテキストは別です。

処理Az PowerShellAzure CLI
マネージドIDでログインConnect-AzAccount -Identityaz login --identity
サブスクリプション選択Set-AzContextaz account set
個別コマンドでの指定-DefaultProfile--subscription
主要な戻り値PowerShellオブジェクトJSON、TSV、テーブルなど
ネイティブコマンドの失敗確認PowerShell例外$LASTEXITCODE
JSONのオブジェクト化原則不要ConvertFrom-Json

Connect-AzAccount -Identityを実行しても、Azure CLIへのログインは完了しません。反対に、az login --identityを実行してもAz PowerShellのコンテキストは作成されません。両方を使うランブックでは、それぞれ個別に認証します。(Microsoft Learn)

また、Set-AzContextで選択したサブスクリプションはAzure CLIへ引き継がれません。誤ったサブスクリプションを操作しないよう、Azure CLIではaz account setを実行するか、各コマンドへ--subscriptionを付けるのが安全です。

Az PowerShellも併用する場合は、別ジョブのコンテキストを引き継がないよう、ランブックの先頭で次の処理を行います。

Disable-AzContextAutosave -Scope Process

$azureContext = (Connect-AzAccount -Identity).Context

$azureContext = Set-AzContext `
    -SubscriptionId $SubscriptionId `
    -DefaultProfile $azureContext

Azure Automationでは、保存された既定コンテキストの影響で別のサブスクリプションを参照する可能性があるため、Disable-AzContextAutosaveと-DefaultProfileの使用が推奨されています。(Microsoft Learn)

よくある失敗と確認ポイント

公式クイックスタートにPowerShell 7.4と表示される

2026年8月5日時点では、Azure CLIクイックスタートの本文にPowerShell 7.4とAzure CLI 2.64.0の例が残っています。一方、Azure Update 568102ではPowerShell 7.6ランブックでのAzure CLI対応が一般提供済みです。

手順は次のように読み替えます。

  • Runtime versionの7.4を7.6へ変更する
  • Azure CLIのバージョン番号をコピーせず、portalの表示を確認する
  • ランブック内でaz versionを実行する
  • 既存の7.4環境を直接変更せず、7.6環境を新規作成する

(Microsoft Learn)

azコマンドが見つからない

azがコマンドとして認識されない場合は、次を確認します。

  • ランブックがPowerShell 7.6のRuntime Environmentに関連付いているか
  • Runtime EnvironmentのPackagesにAzure CLIが含まれているか
  • テスト対象が旧Runtime Environmentのままになっていないか
  • 実行ジョブの詳細に想定したRuntime Environmentが表示されているか

最初にaz versionだけを実行すると、認証問題とCLIパッケージ問題を切り分けられます。

az loginに失敗する

az login --identityが失敗する場合は、Automationアカウントの「ID」でシステム割り当てがオンになっているか確認します。

ユーザー割り当てマネージドIDを使う場合は、Automationアカウントへの関連付けに加え、--client-idなどで利用するIDを明示します。ユーザー割り当てマネージドIDは、Azure Automationのクラウドジョブで利用します。(Microsoft Learn)

ログインできるがAuthorizationFailedになる

ログイン成功とリソース操作の許可は別です。az loginが成功しても、対象リソースへのRBACが不足していれば403エラーになります。

確認する項目は次のとおりです。

  • ロールを割り当てたマネージドIDが正しいか
  • ロールの割り当て先スコープが正しいか
  • 対象リソースが別のサブスクリプションにないか
  • 実行するazコマンドに必要なアクションがロールに含まれているか
  • ロール割り当て直後で反映待ちになっていないか

想定と違うサブスクリプションを操作する

マネージドIDが複数のサブスクリプションにアクセスできる場合は、対象を明示しない実装を避けます。

az account set --subscription $SubscriptionId

さらに重要な更新・削除コマンドでは、--subscription $SubscriptionIdも個別に付けると安全です。

ConvertFrom-Jsonでエラーになる

JSONを扱うコマンドでは、次のオプションを指定します。

--output json --only-show-errors

--output tableの結果をConvertFrom-Jsonへ渡すことはできません。また、複数行で返されたJSONは、次のように結合してから変換します。

$result = ($output -join "`n") | ConvertFrom-Json

Azure CLIの終了コードを確認せず、エラーメッセージをJSONとして変換しようとするのも典型的な失敗です。

Runtime Environmentのパッケージ更新で複数ランブックが影響を受ける

Runtime Environmentは複数のランブックで共有できます。パッケージを更新すると、その環境に関連付いたランブックへ新しい設定が反映されます。

そのため、本番用Runtime Environmentのパッケージを直接更新するのではなく、テスト用環境を別に作成し、動作確認後にランブックの関連付けを切り替える方法が安全です。Runtime languageとRuntime versionは変更できないため、7.4環境を7.6へ書き換えるのではなく、新しい7.6環境を作成します。(Microsoft Learn)

ファイアウォールやプライベート接続がある場合の注意点

ここまでの手順は、ランブックをAzure Automationのクラウドサンドボックスで実行する前提です。

Azure Storage、Azure Key Vault、Azure SQLなどでファイアウォールを有効にしている場合、Azure Automationのクラウドランブックからアクセスできない構成があります。「信頼されたMicrosoftサービスを許可する」設定だけでは接続できないケースもあるため、必要に応じて仮想ネットワーク内のHybrid Runbook Workerを検討します。(Microsoft Learn)

Hybrid Runbook Workerでは、次の点がクラウドジョブと異なります。

  • ホスト側に必要なPowerShellランタイムを用意する
  • Azure CLIのインストール状態とPATHを確認する
  • Workerから対象サービスへのネットワーク接続を確認する
  • AutomationアカウントとWorkerのどちらのマネージドIDを使うか整理する
  • PowerShell 7.6とHybrid Runbook Workerの対応条件を最新ドキュメントで確認する

特にマネージドIDの選択ルールはクラウドジョブと異なるため、クラウドジョブで成功したコードをそのままHybrid Workerへ移すのではなく、Worker上で個別にテストしてください。

既存ランブックをPowerShell 7.6へ移行する手順

既存のPowerShell 7.2や7.4ランブックを移行する場合は、次の順序が安全です。

  1. 現在のランブックとRuntime Environmentを記録します。
  2. PowerShell 7.6のテスト用Runtime Environmentを作成します。
  3. 本番ランブックを複製します。
  4. 複製したランブックを7.6環境へ関連付けます。
  5. az versionと$PSVersionTableを出力します。
  6. 読み取り専用のazコマンドで認証とRBACを確認します。
  7. 本来の更新処理をテストします。
  8. 出力、エラー、所要時間を旧環境と比較します。
  9. 問題がなければ本番ランブックを7.6環境へ切り替えます。
  10. 問題が発生した場合は以前のRuntime Environmentへ戻します。

Runtime Environmentを切り替えることで、ランブックのコードと実行環境を分けて管理できます。新しい環境で問題が発生しても、以前の環境へ関連付け直すことでロールバックしやすくなります。(Microsoft Learn)

PowerShell 7.1と7.2については、Azure Automationでのサポートが2026年9月30日に終了すると案内されています。終了後もランブックが動作し続ける場合はありますが、セキュリティ更新、バグ修正、公式サポートを受けられなくなるため、対象ランブックを早めに洗い出す必要があります。(Microsoft Learn)

PowerShell 7.6ランブックでAzure CLIを使うための確認事項

Azure AutomationのPowerShell 7.6ランブックからAzure CLIを実行する際は、次の順番で構成すると失敗を減らせます。

  1. AutomationアカウントのマネージドIDを有効にする
  2. 対象リソースへ必要最小限のRBACロールを付与する
  3. PowerShell 7.6のRuntime Environmentを新規作成する
  4. Packages画面でAzure CLIを確認する
  5. ランブックをRuntime Environmentへ関連付ける
  6. az versionでCLIの実行可否を確認する
  7. az login --identityで認証する
  8. サブスクリプションを明示する
  9. $LASTEXITCODEで失敗を検出する
  10. JSON出力をConvertFrom-Jsonで処理する
  11. テストウィンドウで確認してから発行する
  12. 本番用と検証用のRuntime Environmentを分ける

最初に行うべき作業は、ps76-azcli-testのような検証用Runtime Environmentを作成し、閲覧者ロールだけを付与したマネージドIDでリソース一覧を取得することです。ここまで成功したら、実際に自動化したいazコマンドへ置き換え、必要な権限だけを追加してください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次