Azure PowerShell 內容物件

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 內容包含:

  • 用來使用 連線-AzAccount 登入 Azure 的帳戶。 Azure 內容會從帳戶的觀點來看,將使用者、應用程式標識碼和服務主體視為相同。
  • 作用中的訂用帳戶是與 Microsoft 建立和執行與租使用者相關聯的 Azure 資源服務合約。 租使用者通常稱為 檔中的組織 ,或在使用 Active Directory 時稱為組織。
  • 令牌快取參考,這是用來存取 Azure 雲端的預存驗證令牌。 儲存此令牌的位置,以及其保存的時間長度取決於 內容自動儲存設定

如需這些詞彙的詳細資訊,請參閱 Microsoft Entra 術語。 Azure 內容所使用的驗證令牌與屬於持續性會話一部分的其他預存令牌相同。

當您使用 Connect-AzAccount登入時,至少會為您的預設訂用帳戶建立一個 Azure 內容。 傳 Connect-AzAccount 回的對像是用於其餘 PowerShell 工作階段的預設 Azure 內容。

取得 Azure 內容

可用的 Azure 內容會使用 Get-AzContext Cmdlet 來擷取。 使用 ListAvailable 參數列出可用的內容:

Get-AzContext -ListAvailable

或依名稱取得內容:

Get-AzContext -Name 'mycontext'

內容名稱可能與相關聯訂用帳戶的名稱不同。

重要

可用的 Azure 內容不一定是您可用的訂用帳戶。 Azure 內容只代表本機儲存的資訊。 您可以使用 Get-AzSubscription Cmdlet 取得訂用帳戶。

從訂用帳戶資訊建立新的 Azure 內容

Set-AzContext Cmdlet 可用來建立新的 Azure 內容,並將其設定為使用中內容。 建立新 Azure 內容最簡單的方式是使用現有的訂用帳戶資訊。 Cmdlet 的設計目的是要從 Get-AzSubscription 中取得輸出物件做為管道值,並設定新的 Azure 內容:

Get-AzSubscription -SubscriptionName 'MySubscriptionName' |
  Set-AzContext -Name 'MyContextName'

或者視需要提供訂用帳戶名稱或標識碼和租用戶識別碼:

Set-AzContext -Name 'MyContextName' -Subscription 'MySubscriptionName' -Tenant '00000000-0000-0000-0000-000000000000'

如果省略 Name 參數,則訂用帳戶的名稱和標識碼會以訂用帳戶名稱 (subscription-id) 格式作為內容名稱。

變更作用中的 Azure 內容

Set-AzContextSelect-AzContext 都可以用來變更作用中的 Azure 內容。 如建立新的 Azure 內容中所述Set-AzContext如果訂用帳戶不存在,請為訂用帳戶建立新的 Azure 內容,然後將作用中內容切換至該內容。

Select-AzContext 僅供現有 Azure 內容使用,且運作方式與 使用 Set-AzContext -Context類似,但設計用於管線:

Set-AzContext -Context $(Get-AzContext -Name 'mycontext') # Set a context with an inline Azure context object
Get-AzContext -Name 'mycontext' | Select-AzContext # Set a context with a piped Azure context object

如同 Azure PowerShell 中的許多其他帳戶和內容管理命令,並支援 Select-AzContextScope 參數,Set-AzContext以便控制內容作用中的時間長度。 範圍 可讓您變更單一會話的作用中內容,而不需要變更預設值:

Get-AzContext -Name 'mycontext' | Select-AzContext -Scope Process

若要避免切換整個 PowerShell 會話的內容,您可以使用 AzContext 參數的 Azure PowerShell 命令,針對指定的內容執行:

$context = Get-AzContext -Name "mycontext"
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-AzContextAutosave Cmdlet 在 Azure PowerShell 中停用內容自動儲存。 停用內容自動儲存並不會清除任何儲存的令牌。 若要瞭解如何清除已儲存的 Azure 內容資訊,請參閱 移除 Azure 內容和認證

  • 您可以使用 Enable-AzContextAutosave Cmdlet 來明確啟用 Azure 內容自動儲存。 啟用自動儲存后,使用者的內容會儲存在本機,以供稍後的PowerShell會話使用。

  • 使用 Save-AzContext 手動儲存內容,以便在未來的 PowerShell 會話中使用,其中可以使用 Import-AzContext 載入內容:

    Save-AzContext -Path current-context.json # Save the current context
    Save-AzContext -Profile $profileObject -Path other-context.json # Save a context object
    Import-AzContext -Path other-context.json # Load the context from a file and set it to the current context
    

警告

停用內容自動儲存並不會清除任何已儲存的內容資訊。 若要移除儲存的資訊,請使用 Clear-AzContext Cmdlet。 如需移除已儲存內容的詳細資訊,請參閱 移除內容和認證

這些命令都支援 Scope 參數,其可接受的值 Process ,只套用至目前執行中的進程。 例如,若要確保新建立的內容在結束PowerShell會話之後不會儲存:

Disable-AzContextAutosave -Scope Process
$context2 = Set-AzContext -Subscription 'sub-id' -Tenant 'other-tenant'

內容資訊和令牌會儲存在 Windows 上的 $env:USERPROFILE\.Azure 目錄中,以及儲存在其他 $HOME/.Azure 平臺上。 訂用帳戶標識碼和租使用者標識碼等敏感性資訊可能仍會透過記錄或儲存的內容,在預存資訊中公開。 若要瞭解如何清除預存資訊,請參閱 移除內容和認證 一節。

拿掉 Azure 內容和預存認證

若要清除 Azure 內容和認證:

  • 使用 Disconnect-AzAccount 註銷帳戶。 您可以透過帳戶或內容註銷任何帳戶:

    Disconnect-AzAccount # Disconnect active account
    Disconnect-AzAccount -Username 'user@contoso.com' # Disconnect by account name
    
    Disconnect-AzAccount -ContextName 'subscription2' # Disconnect by context name
    Disconnect-AzAccount -AzureContext $contextObject # Disconnect using context object information
    

    中斷連線一律會移除儲存的驗證令牌,並清除與已中斷聯機的用戶或內容相關聯的已儲存內容。

  • 使用 Clear-AzContext。 此 Cmdlet 一律會移除儲存的內容、驗證令牌,以及註銷。

  • 使用 Remove-AzContext 移除內容

    Remove-AzContext -Name 'mycontext' # Remove by name
    Get-AzContext -Name 'mycontext' | Remove-AzContext # Remove by piping Azure context object
    

    如果您移除使用中內容,將會中斷與 Azure 的連線,且需要使用 重新驗證 Connect-AzAccount

另請參閱