在 PowerShell 作業中執行 Azure PowerShell Cmdlet

Azure PowerShell 取決於連線到 Azure 雲端並等候回應,因此這些 Cmdlet 大部分都會封鎖您的 PowerShell 會話,直到他們從雲端取得回應為止。 PowerShell 作業可讓您在背景執行 Cmdlet,或從單一 PowerShell 會話內一次在 Azure 上執行多個工作。

本文簡短概觀說明如何以 PowerShell 作業身分執行 Azure PowerShell Cmdlet,並檢查是否完成。 在 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 Cmdlet 提供 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 Cmdlet 所提供的 AsJob 參數。 此參數會使用作用中的 Azure 內容,自動啟動 Cmdlet 作為 PowerShell 作業:

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

    若要查看 Cmdlet 是否支援 AsJob,請檢查其參考檔。 AsJob 參數不需要啟用內容自動儲存。

您可以使用 Get-Job Cmdlet 來檢查執行中作業的狀態。 若要從作業取得到目前為止的輸出,請使用 Receive-Job Cmdlet。

若要從遠端檢查 Azure 上的作業進度,請使用 Get 與作業所修改之資源類型相關聯的 Cmdlet:

$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

另請參閱