共用方式為


跨 PowerShell 工作階段保存使用者認證

警告

自 2024 年 2 月 29 日起,AzureRM PowerShell 模組已正式淘汰。 建議使用者從 AzureRM 遷移至 Az PowerShell 模組,以確保持續支援和更新。

雖然 AzureRM 模組可能仍可運作,但不再維護或支援它,但會根據用戶的判斷權和風險放置任何繼續使用。 如需轉換至 Az 模組的指引,請參閱我們的 移轉資源

Azure PowerShell 提供稱為 Azure 內容自動儲存的功能,可提供下列功能:

  • 保留登入資訊,以便在新的PowerShell工作階段中重複使用。
  • 更輕鬆地使用背景工作來執行長時間執行的 Cmdlet。
  • 在帳戶、訂用帳戶和環境之間切換,而不需要個別登入。
  • 使用來自相同 PowerShell 工作階段的不同認證和訂用帳戶來執行工作。

已定義的 Azure 內容

Azure 內容是一組資訊,可定義 Azure PowerShell Cmdlet 的目標。 內容是由五個部分所組成:

  • 帳戶 - 用來驗證與 Azure 通訊的 UserName 或服務主體
  • 用帳戶 - 正在處理資源的 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。 Cmdlet Connect-AzureRmAccount (或其別名 Login-AzureRmAccount)會設定 Azure PowerShell Cmdlet 所使用的預設內容,並可讓您存取認證允許的任何租用戶或訂用帳戶。

若要在登入之後新增內容,請使用 Set-AzureRmContext (或其別名 )。 Select-AzureRmSubscription

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

上一個範例會使用您目前的認證,新增以 『Contoso Subscription 1』 為目標的新內容。 新的內容名為 『Contoso1』。 如果您未提供內容的名稱,則會使用帳戶標識碼和訂用帳戶標識碼來使用預設名稱。

若要重新命名現有的內容,請使用 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 - 允許選取現有的具名內容,以及對進程或目前使用者的範圍變更。