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

Azure PowerShell 上下文对象

Azure PowerShell 使用 Azure PowerShell 上下文对象(Azure 上下文)来保留订阅和身份验证信息。 如果有多个订阅,Azure 上下文允许你选择要运行 Azure PowerShell cmdlet 的订阅。 Azure 上下文还用于存储多个 PowerShell 会话中的登录信息并运行后台任务。

本文介绍如何管理 Azure 上下文,而不是如何管理订阅或帐户。 如果想要管理用户、订阅、租户或其他帐户信息,请参阅 Microsoft Entra ID 文档。 要了解如何将上下文用于运行后台任务或并行任务,请在熟悉 Azure 上下文后参阅在 PowerShell 作业中运行 Azure PowerShell cmdlet

Azure 上下文对象概述

Azure 上下文是 PowerShell 对象,表示要对其运行命令的活动订阅,以及连接到 Azure 云所需的身份验证信息。 有了 Azure 上下文,Azure PowerShell 便无需在你每次切换订阅时重新对你的帐户进行身份验证。 Azure 上下文包含:

  • 用于使用 Connect-AzAccount 登录到 Azure 的帐户。 从帐户视角来看,Azure 上下文将用户、应用程序 ID 和服务主体视为相同。
  • 活动订阅,这是与 Microsoft 达成的有关创建和运行与租户关联的 Azure 资源的服务协议。 通常在文档中或在使用 Active Directory 时将租户称为“组织”。
  • 对令牌缓存的引用(为访问 Azure 云而存储的身份验证令牌)。 此令牌的存储位置及其保留时间长度取决于上下文自动保存设置

有关这些术语的详细信息,请参阅 Microsoft Entra 术语。 Azure 上下文使用的身份验证令牌与作为持久会话一部分的其他已存储令牌相同。

当你使用 Connect-AzAccount 登录时,系统将为默认订阅至少创建一个 Azure 上下文。 Connect-AzAccount 返回的对象是用于该 PowerShell 会话的其余部分的默认 Azure 上下文。

获取 Azure 上下文

可通过 Get-AzContext cmdlet 来检索可用的 Azure 上下文。 使用 ListAvailable 参数列出可用的上下文:

Get-AzContext -ListAvailable

或按名称获取上下文:

Get-AzContext -Name 'mycontext'

上下文名称可能不同于关联订阅的名称。

重要

可用的 Azure 上下文并非始终是你的可用订阅。 Azure 上下文仅表示本地存储的信息。 可以通过 Get-AzSubscription cmdlet 获取订阅。

从订阅信息创建新的 Azure 上下文

Set-AzContext cmdlet 用于创建新的 Azure 上下文并将其设置为活动上下文。 创建新 Azure 上下文的最简单方法是使用现有的订阅信息。 此 cmdlet 旨在采用来自 Get-AzSubscription 的输出对象作为管道值,并配置新的 Azure 上下文:

Get-AzSubscription -SubscriptionName 'MySubscriptionName' |
  Set-AzContext -Name 'MyContextName'

如果需要,请指定订阅名称或 ID 以及租户 ID:

Set-AzContext -Name 'MyContextName' -Subscription 'MySubscriptionName' -Tenant '00000000-0000-0000-0000-000000000000'

如果省略 Name 参数,则订阅的名称和 ID 将以“订阅名 (subscription-id)”格式用作上下文名称。

更改活动 Azure 上下文

Set-AzContextSelect-AzContext 都可用于更改活动 Azure 上下文。 如创建新的 Azure 上下文中所述,Set-AzContext 会为订阅创建新的 Azure 上下文(如果不存在),然后将活动上下文切换到此上下文。

Select-AzContext 仅适用于现有的 Azure 上下文,作用类似于使用 Set-AzContext -Context,但设计为与管道配合使用:

Set-AzContext -Context $(Get-AzContext -Name 'mycontext') # Set a context with an inline Azure context object
Get-AzContext -Name 'mycontext' | Select-AzContext # Set a context with a piped Azure context object

与 Azure PowerShell 中的许多其他帐户和上下文管理命令一样,Set-AzContextSelect-AzContext 支持 Scope 参数,以便你可控制上下文处于活动状态的时间长度。 使用 Scope 可更改单个会话的活动上下文,而无需更改默认值:

Get-AzContext -Name 'mycontext' | Select-AzContext -Scope Process

要避免切换整个 PowerShell 会话的上下文,可使用 AzContext 参数针对给定上下文运行 Azure PowerShell 命令:

$context = Get-AzContext -Name "mycontext"
New-AzVM -Name ExampleVM -AzContext $context

将上下文与 Azure PowerShell cmdlet 配合使用的另一个主要用途是运行后台命令。 若要了解有关使用 Azure PowerShell 运行 PowerShell 作业的详细信息,请参阅在 PowerShell 作业中运行 Azure PowerShell cmdlet

跨 PowerShell 会话保存 Azure 上下文

默认情况下将保存 Azure 上下文以便在 PowerShell 会话之间使用。 可以通过以下方式更改此行为:

  • -Scope ProcessConnect-AzAccount 配合使用进行登录。

    Connect-AzAccount -Scope Process
    

    作为此登录的一部分返回的 Azure 上下文仅对当前会话有效,而且无论 Azure PowerShell 上下文自动保存设置如何,都不会自动保存。

  • 使用 Disable-AzContextAutosave cmdlet 禁用 Azure PowerShell 中的上下文自动保存。 禁用上下文自动保存不会清除任何已存储的令牌。 若要了解如何清除已存储的 Azure 上下文信息,请参阅删除 Azure 上下文和凭据

  • 可以使用 Enable-AzContextAutosave cmdlet 来显式启用 Azure 上下文自动保存。 启用自动保存后,用户的上下文将存储在本地,供以后的 PowerShell 会话使用。

  • 使用 Save-AzContext 手动保存要在将来的 PowerShell 会话中使用的上下文,在将来的 PowerShell 会话中可以使用 Import-AzContext 加载这些上下文:

    Save-AzContext -Path current-context.json # Save the current context
    Save-AzContext -Profile $profileObject -Path other-context.json # Save a context object
    Import-AzContext -Path other-context.json # Load the context from a file and set it to the current context
    

警告

禁用上下文自动保存不会清除已保存的任何已存储上下文信息。 若要删除已存储的信息,请使用 Clear-AzContext cmdlet。 有关删除已保存的上下文的详细信息,请参阅删除上下文和凭据

这些命令中的每个命令都支持 Scope 参数,此参数可采用 Process 的值以仅应用于当前正在运行的进程。 例如,为了确保新创建的上下文在退出 PowerShell 会话后不会保存:

Disable-AzContextAutosave -Scope Process
$context2 = Set-AzContext -Subscription 'sub-id' -Tenant 'other-tenant'

上下文信息和令牌存储在 Windows 上的 $env:USERPROFILE\.Azure 目录中以及其他平台上的 $HOME/.Azure 中。 订阅 ID 和租户 ID 之类的敏感信息仍可能通过日志或保存的上下文在已存储的信息中公开。 若要了解如何清除已存储的信息,请参阅删除上下文和凭据部分。

删除 Azure 上下文和已存储的凭据

若要清除 Azure 上下文和凭据,请执行以下操作:

  • 使用 Disconnect-AzAccount 注销帐户。 可以按帐户或上下文注销任何帐户:

    Disconnect-AzAccount # Disconnect active account
    Disconnect-AzAccount -Username 'user@contoso.com' # Disconnect by account name
    
    Disconnect-AzAccount -ContextName 'subscription2' # Disconnect by context name
    Disconnect-AzAccount -AzureContext $contextObject # Disconnect using context object information
    

    断开连接总是会删除存储的身份验证令牌,并清除与断开连接的用户或上下文关联的已保存上下文。

  • 使用 Clear-AzContext。 此 cmdlet 会始终删除存储的上下文和身份验证令牌,并将你注销。

  • 使用 Remove-AzContext 删除上下文:

    Remove-AzContext -Name 'mycontext' # Remove by name
    Get-AzContext -Name 'mycontext' | Remove-AzContext # Remove by piping Azure context object
    

    如果删除活动上下文,则将从 Azure 断开连接,并需要使用 Connect-AzAccount 重新进行身份验证。

另请参阅