PowerShell ジョブで Azure PowerShell コマンドレットを実行する

Azure PowerShell は、Azure クラウドへの接続と応答の待機に依存します。そのため、これらのコマンドレットのほとんどは、クラウドからの応答を取得するまで PowerShell セッションをブロックします。 PowerShell ジョブを使用すると、1 つの PowerShell セッション内から、バックグラウンドでコマンドレットを実行したり、一度に複数のタスクを Azure で実行したりすることができます。

この記事では、Azure PowerShell コマンドレットを PowerShell ジョブとして実行し、完了を確認する方法について簡単に説明します。 Azure PowerShell でコマンドを実行するには Azure PowerShell コンテキストを使用する必要があります。詳細については、Azure コンテキストとサインイン情報に関する記事をご覧ください。 PowerShell ジョブの詳細については、「PowerShell ジョブについて」を参照してください。

PowerShell ジョブでの Azure コンテキスト

PowerShell ジョブは、PowerShell セッションがアタッチされていない個別のプロセスとして実行されるため、Azure の資格情報をそれらと共有する必要があります。 資格情報は、次のいずれかの方法を使用して、Azure コンテキスト オブジェクトとして渡されます。

  • 自動的なコンテキストの永続化。 コンテキストの永続化は既定で有効になっており、サインイン情報が複数のセッションにわたって保持されます。 コンテキストの永続化が有効になっていると、現在の Azure コンテキストが新しいプロセスに渡されます。

    Enable-AzContextAutosave # Enables context autosave if not already on
    $vmadmin = Get-Credential
    
    Start-Job {
      New-AzVM -Name MyVm -Credential $Using:vmadmin
    }
    
  • AzContext パラメーターを持つ任意の Azure PowerShell コマンドレットを使用して、Azure コンテキスト オブジェクトを指定します。

    $context = Get-AzContext -Name 'mycontext' # Get an Azure context object
    $vmadmin = Get-Credential
    
    $job = Start-Job {
      New-AzVM -Name MyVm -AzContext $Using:context -Credential $Using:vmadmin
    }
    

    コンテキストの永続化が無効になっている場合は、AzContext パラメーターが必要です。

  • 一部の Azure PowerShell コマンドレットによって提供される AsJob パラメーターを使用します。 このスイッチは、アクティブな Azure コンテキストを使用して、コマンドレットを PowerShell ジョブとして自動的に開始します。

    $vmadmin = Get-Credential
    $job = New-AzVM -Name MyVm -Credential $vmadmin -AsJob
    

    コマンドレットが AsJob をサポートしているかどうかを確認するには、そのリファレンス ドキュメントを参照してください。 AsJob パラメーターは、コンテキストの自動保存が有効になっている必要はありません。

Get-Job コマンドレットを使用して、実行中のジョブの状態を確認できます。 ジョブからの現時点までの出力を取得するには、Receive-Job コマンドレットを使用します。

Azure で操作の進行状況をリモートで確認するには、ジョブによって変更されているリソースの種類に関連付けられている Get コマンドレットを使用します。

$vmadmin = Get-Credential
$context = Get-AzContext -Name 'mycontext'
$vmName = 'MyVm'

$job = Start-Job {
  New-AzVM -Name $Using:vmName -AzContext $Using:context -Credential $Using:vmadmin
}

Get-Job -Id $job.Id
Get-AzVM -Name $vmName

参照