你当前正在访问 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 资源的服务协议。 通常在文档中或在使用 Microsoft Entra 时将租户称为“组织”
  • 对令牌缓存(为访问 Azure 云而存储的身份验证令牌)的引用。 上下文自动保存设置 确定令牌的存储位置及其保留时间。

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

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

获取 Azure 上下文

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

Get-AzContext -ListAvailable

或按名称获取上下文:

Get-AzContext -Name MyContextName

上下文名称可能与关联的订阅的名称不同。 若要确定上下文名称,请使用默认不显示的 Name 属性的值。

Get-AzContext -ListAvailable | Select-Object -Property *

重要

可用的 Azure 上下文并不总是与您的可用订阅相同。 Azure 上下文仅表示本地存储的信息。 可以使用 Get-AzSubscription cmdlet 获取订阅。

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

Set-AzContext cmdlet 用于创建和设置新的 Azure 上下文作为活动上下文。 创建新 Azure 上下文的最简单方法是使用现有订阅信息。 Set-AzContext 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 Name (subscription-id)格式的上下文名称。

更改活动 Azure 上下文

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

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

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

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

Get-AzContext -Name MyContextName | Select-AzContext -Scope Process

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

$context = Get-AzContext -Name MyContextName
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 会话中使用。在这些会话中,可以通过 Import-AzContext加载它们。

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

警告

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

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

Disable-AzContextAutosave -Scope Process
Set-AzContext -Subscription 'Subscription ID or Name' -Tenant 00000000-0000-0000-0000-000000000000

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

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

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

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

    Disconnect-AzAccount # Disconnect active account
    Disconnect-AzAccount -Username 'user@contoso.com' # Disconnect by account name
    Disconnect-AzAccount -ContextName MyContextName # Disconnect by context name
    
    $context = Get-AzContext
    Disconnect-AzAccount -AzureContext $context # Disconnect using context object information
    

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

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

  • 删除具有 Remove-AzContext的上下文:

    Remove-AzContext -Name MyContextName # Remove by name
    Get-AzContext -Name MyContextName | Remove-AzContext # Remove by piping an Azure context object
    

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

另请参阅