跨 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
- Enable-AzureRmContextAutosave - 允許在 Powershell 會話之間儲存內容。 任何變更會改變全域內容。
- Disable-AzureRmContextAutosave - 關閉自動儲存內容。 每個新的PowerShell工作階段都必須再次登入。
- Select-AzureRmContext - 選取內容作為預設值。 所有 Cmdlet 都會使用此內容中的認證進行驗證。
- Disconnect-AzureRmAccount - 移除與帳戶相關聯的所有認證和內容。
- Remove-AzureRmContext - 移除具名內容。
- Rename-AzureRmContext - 重新命名現有的內容。
現有配置檔 Cmdlet 的變更
- Add-AzureRmAccount - 允許登入進程或目前使用者的範圍。 允許在驗證之後命名預設內容。
- Import-AzureRmContext - 允許登入進程或目前使用者的範圍。
- Set-AzureRmContext - 允許選取現有的具名內容,以及對進程或目前使用者的範圍變更。