你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 PowerShell 作业中运行 Azure PowerShell cmdlet

Azure PowerShell 依赖于连接到 Azure 云并等待响应,因此其中的大多数 cmdlet 会阻止你的 PowerShell 会话,直到它们获得来自云的响应。 使用 PowerShell 作业,可在后台运行 cmdlet,或者在 Azure 上一次执行多个任务(从单个 PowerShell 会话内)。

本文简要概述了如何将 Azure PowerShell cmdlet 作为 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 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

另请参阅