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 上下文包括:
- 用于通过 登录 Azure 的
Connect-AzAccount
。 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-AzContext
和 Select-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-AzContext
和 Select-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 Process
通过Connect-AzAccount
登录。Connect-AzAccount -Scope Process
作为此登录的一部分返回的 Azure 上下文仅适用于当前会话,且不能自动保存,不考虑 Azure PowerShell 上下文的自动保存设置。
使用
Disable-AzContextAutosave
cmdlet 在 Azure PowerShell 中禁用上下文自动保存。 禁用上下文自动保存不会清除任何存储的令牌。 若要了解如何清除存储的 Azure 上下文信息,请参阅 删除 Azure 上下文和存储的凭据。Azure 上下文自动保存可以通过
Enable-AzContextAutosave
cmdlet 显式启用。 启用自动保存后,用户的上下文将存储在本地供以后的 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
重新进行身份验证。