你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure PowerShell使用 Azure PowerShell 上下文对象(Azure上下文)来保存订阅和身份验证信息。 如果您有权访问多个订阅,Azure 上下文允许您选择要在其上运行 Azure PowerShell 命令的订阅。 Azure上下文还用于跨多个 PowerShell 会话存储登录信息并运行后台任务。
本文介绍如何管理Azure上下文,而不是管理订阅或帐户。 如果要管理用户、订阅、租户或其他帐户信息,请参阅 Microsoft Entra ID 文档。 若要了解有关使用上下文运行后台或并行任务的信息,请在熟悉 Azure 上下文之后,参阅 在 PowerShell 作业中运行 Azure PowerShell cmdlets。
Azure上下文对象的概述
Azure 上下文是 PowerShell 对象,用于表示可以执行命令的活动订阅,及连接 Azure 云所需的身份验证信息。 使用Azure上下文时,Azure PowerShell无需每次切换订阅时重新对帐户进行身份验证。 Azure上下文包括:
- 用于登录到 Azure 的 帐户。 Azure 上下文在帐户视角上对用户、应用程序 ID 和服务主体一视同仁。
- 活动订阅,这是与租户关联的 Microsoft 服务协议,用于创建和管理 Azure 上的资源。 租户通常在文档中或与 Microsoft Entra 协作时称为组织。
- 对 token 缓存的引用,这是用于访问 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-AzContextAutosavecmdlet 禁用Azure PowerShell中的上下文自动保存。 禁用上下文自动保存不会清除任何存储的令牌。 若要了解如何清除存储的Azure上下文信息,请参阅 Remove Azure 上下文和存储的凭据。可以通过使用
Enable-AzContextAutosavecmdlet 显式启用 Azure 上下文自动保存。 启用自动保存后,用户的上下文将存储在本地供以后的 PowerShell 会话使用。在 PowerShell 会话中手动使用
Save-AzContext保存上下文,以便在将来的会话中通过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。 有关删除保存的上下文的详细信息,请参阅 Remove 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重新进行身份验证。