你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
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 上下文
可以使用 cmdlet 检索 Get-AzContext 可用的 Azure 上下文。 使用 ListAvailable 参数列出可用上下文:
Get-AzContext -ListAvailable
或者按名称获取上下文:
Get-AzContext -Name MyContextName
上下文名称可能与关联的订阅的名称不同。 若要确定上下文名称,请使用默认情况下不显示的 Name 属性的值。
Get-AzContext -ListAvailable | Select-Object -Property *
重要
可用的 Azure 上下文并不总是可用的订阅。 Azure 上下文仅表示本地存储的信息。 可以使用 cmdlet 获取订阅 Get-AzSubscription 。
从订阅信息创建新的 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-AzContextScope 参数,以便控制上下文处于活动状态的时间。
范围 允许更改单个会话的活动上下文,而无需更改默认值:
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-AzContextAutosavecmdlet 在 Azure PowerShell 中禁用上下文自动保存。 禁用上下文自动保存不会清除任何存储的令牌。 若要了解如何清除存储的 Azure 上下文信息,请参阅 “删除 Azure 上下文”和“存储的凭据”。可以使用 cmdlet 显式启用
Enable-AzContextAutosaveAzure 上下文自动保存。 启用自动保存后,用户的上下文将存储在本地供以后的 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。 有关删除已保存的上下文的详细信息,请参阅 “删除 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-AzContextRemove-AzContext -Name MyContextName # Remove by name Get-AzContext -Name MyContextName | Remove-AzContext # Remove by piping an Azure context object如果删除活动上下文,则断开与 Azure 的连接,需要重新进行身份验证
Connect-AzAccount。