次の方法で共有


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

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

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

Azure コンテキストを利用した PowerShell ジョブ

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

こちらもご覧ください