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

在不同的 PowerShell 会话中保留用户凭据

警告

AzureRM PowerShell 模块已自 2024 年 2 月 29 日起正式弃用。 为了确保持续获得支持和更新,建议用户从 AzureRM 迁移到 Az PowerShell 模块。

尽管 AzureRM 模块仍可运行,但不再受到维护或支持,任何继续使用的行为都由用户自行决定并自行承担风险。 有关过渡到 Az 模块的指导,请参阅我们的迁移资源

Azure PowerShell 提供了一项称为 Azure 上下文自动保存的功能,它提供了以下功能:

  • 在新 PowerShell 会话中保留登录信息供重复使用。
  • 方便使用后台任务来执行长时间运行的 cmdlet。
  • 无需另行登录即可在不同的帐户、订阅与环境之间切换。
  • 通过相同的 PowerShell 会话同时使用不同的凭据和订阅执行任务。

定义的 Azure 上下文

Azure 上下文是一组定义 Azure PowerShell cmdlet 目标的信息。 上下文由五个部分组成:

  • 帐户 - 对 Azure 通信进行身份验证时所用的用户名或服务主体
  • 订阅 - 包含正在处理的资源的 Azure 订阅。
  • 租户 - 包含你的订阅的 Microsoft Entra 租户。 租户对于 ServicePrincipal 身份验证而言更重要。
  • 环境 - 作为目标的特定 Azure 云,通常是 Azure 全球云。 但是,使用环境设置也可以指定以国家/地区、政府和本地 (Azure Stack) 云为目标。
  • 凭据 - Azure 用来验证你的身份并确保你有权访问 Azure 中的资源的信息

在以前的版本中,每次打开新的 PowerShell 会话时,都必须创建 Azure 上下文。 从 Azure PowerShell v4.4.0 开始,每次打开新的 PowerShell 会话,Azure 上下文都可自动保存。

自动保存上下文供下次登录时使用

在 6.3.0 和更高版本中,Azure PowerShell 会在各个会话之间自动保留你的上下文信息。 若要将 PowerShell 设置为忘记上下文和凭据,请使用 Disable-AzureRmContextAutoSave。 每次打开 PowerShell 会话时,都需要登录到 Azure。

若要让 Azure PowerShell 在关闭 PowerShell 会话后记住上下文,请使用 Enable-AzureRmContextAutosave。 上下文和凭据信息自动保存在用户目录中的特殊隐藏文件夹内 (%AppData%\Roaming\Windows Azure PowerShell)。 每个新的 PowerShell 会话都以最后一个会话中使用的上下文为目标。

用于管理 Azure 上下文的 cmdlet 也允许进行精细控制。 是希望将更改只应用到当前 PowerShell 会话(Process 范围)还是每个 PowerShell 会话(CurrentUser 范围)。 使用上下文范围中更详细地介绍了这些选项。

以后台作业的形式运行 Azure PowerShell cmdlet

Azure 上下文自动保存功能还允许与 PowerShell 后台作业共享上下文。 在 PowerShell 中,可以后台作业的形式启动和监视长时间执行的任务,而无需等待任务完成。 可通过两种不同的方式与后台作业共享凭据:

  • 将上下文作为参数传递

    大多数 AzureRM cmdlet 允许将上下文作为参数传递给 cmdlet。 可按以下示例中所示,将上下文传递给后台作业:

$job = Start-Job { param ($ctx) New-AzureRmVm -AzureRmContext $ctx [...其他参数 ...]}-ArgumentList (Get-AzureRmContext)


- Using the default context with Autosave enabled

If you have enabled **Context Autosave**, background jobs automatically use the default saved
context.

```powershell
$job = Start-Job { New-AzureRmVm [... Additional parameters ...]}

需要知道后台任务的结果时,可使用 Get-Job 检查作业状态,使用 Wait-Job 等待作业完成。 使用 Receive-Job 可捕获或显示后台作业的输出。 有关详细信息,请参阅 about_Jobs

创建、选择、重命名和删除上下文

若要创建上下文,必须登录到 Azure。 Connect-AzureRmAccount cmdlet(或其别名 Login-AzureRmAccount)设置 Azure PowerShell cmdlet 使用的默认上下文,并用于访问凭据所允许的任何租户或订阅。

若要在登录后添加新的上下文,请使用 Set-AzureRmContext(或其别名 Select-AzureRmSubscription)。

Set-AzureRMContext -Subscription 'Contoso Subscription 1' -Name 'Contoso1'

上面的示例使用当前凭据添加了以“Contoso Subscription 1”为目标的新上下文。 新上下文名为“Contoso1”。 如果未提供上下文的名称,将使用包含帐户 ID 和订阅 ID 的默认名称。

若要重命名现有上下文,请使用 Rename-AzureRmContext cmdlet。 例如:

Rename-AzureRmContext '[user1@contoso.org; 123456-7890-1234-564321]' 'Contoso2'

此示例将自动命名为 [user1@contoso.org; 123456-7890-1234-564321] 的上下文重命名为简单名称“Contoso2”。 可管理上下文的 cmdlet 还会使用 tab 自动补全,让我们快速选择上下文。

最后,若要删除上下文,请使用 Remove-AzureRmContext cmdlet。 例如:

Remove-AzureRmContext Contoso2

忘记名为“Contoso2”的上下文。 可以使用 Set-AzureRmContext 重新创建此上下文

删除凭据

可以使用 Disconnect-AzureRmAccount(也称为 Logout-AzureRmAccount)删除用户或服务主体的所有凭据和关联的上下文。 在不带参数执行时,Disconnect-AzureRmAccount cmdlet 会删除与当前上下文中的用户或服务主体关联的所有凭据和上下文。 可以传入用户名、服务主体名称或上下文,来指定以特定的主体为目标。

Disconnect-AzureRmAccount user1@contoso.org

使用上下文范围

有时,我们希望在不影响其他会话的情况下,选择、更改或删除某个 PowerShell 会话中的上下文。 若要更改上下文 cmdlet 的默认行为,请使用 Scope 参数。 Process 范围使默认行为仅适用于当前会话,以此重写默认行为。 与之相反,CurrentUser 范围会更改所有会话而不仅是当前会话中的上下文。

例如,若要更改当前 PowerShell 会话中的默认上下文且不影响其他会话时段或下次打开会话时使用的上下文,请使用:

Select-AzureRmContext Contoso1 -Scope Process

如何记住上下文自动保存设置

上下文自动保存设置保存到 Azure PowerShell 用户目录 (%AppData%\Roaming\Windows Azure PowerShell)。 某些类型的计算机帐户可能无权访问此目录。 对于这种情况,可以使用环境变量

$env:AzureRmContextAutoSave=$true

如果设置为 $true,则自动保存上下文。 如果设置为 $false,则不保存上下文。

对 AzureRM.Profile 模块的更改

用于管理上下文的新 cmdlet

对现有配置文件 cmdlet 的更改

  • Add-AzureRmAccount - 用于设置进程或当前用户的登录范围。 用于在身份验证后命名默认上下文。
  • Import-AzureRmContext - 用于设置进程或当前用户的登录范围。
  • Set-AzureRmContext - 用于选择现有的命名上下文,以及设置对进程或当前用户的更改范围。