共用方式為


Azure PowerShell 內容物件

Azure PowerShell 會使用 Azure PowerShell 內容物件 (Azure 內容) 來保存訂用帳戶和驗證資訊。 如果您有權存取多個訂用帳戶,Azur 内容可讓您選取要在其上執行 Azure PowerShell Cmdlet 的訂用帳戶。 Azure 內容也可用來跨多個 PowerShell 工作階段儲存登入資訊,以及執行背景工作。

本文將說明如何管理 Azure 內容,而非管理訂用帳戶或帳戶。 如果您想要管理使用者、訂用帳戶、租用戶或其他帳戶資訊,請參閱 Microsoft Entra ID 文件。 若要了解如何使用內容來執行背景或平行工作,請在熟悉 Azure 內容後,參閱在 PowerShell 作業中執行 Azure PowerShell Cmdlet

Azure 內容物件概觀

Azure 內容是 PowerShell 物件,代表您對其執行命令的有效訂用帳戶,以及連線至 Azure 雲端所需的驗證資訊。 透過 Azure 內容,Azure PowerShell 就不需要在您每次切換訂用帳戶時重新驗證您的帳戶。 Azure 內容包含下列各項:

  • 用來藉由 Connect-AzAccount 登入 Azure 的帳戶。 就帳戶的觀點而言,Azure 內容會將使用者、應用程式識別碼和服務主體等同視之。
  • 有效訂用帳戶是 Microsoft 提供的服務合約,用來建立和執行與租用戶相關聯的 Azure 資源。 租用戶在文件中或使用 Microsoft Entra 時,通常稱為組織
  • 權杖快取的參考是用來存取 Azure 雲端的預存驗證權杖。 内容自動儲存設定確定了權杖的儲存位置及其持續時間。

如需這些條款的詳細資訊,請參閱 Microsoft Entra 術語。 Azure 內容所使用的驗證權杖與持續性工作階段中其他已儲存的權杖相同。

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

取得 Azure 內容

藉由 Get-AzContext Cmdlet 擷取可用的 Azure 内容。 您可以使用 ListAvailable 參數列出的可用內容:

Get-AzContext -ListAvailable

或依名稱取得內容:

Get-AzContext -Name MyContextName

內容名稱可能與相關聯的訂用帳戶名稱不同。 若要確定内容名稱,請使用預設不顯示的 Name 屬性的值。

Get-AzContext -ListAvailable | Select-Object -Property *

重要

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

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

Set-AzContext Cmdlet 用於建立新的 Azure 内容並將其設定為有效内容。 要建立新的 Azure 內容,最簡單的方式是使用現有的訂用帳戶資訊。 此 Set-AzContext 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 Name (subscription-id) 格式作為內容名稱。

變更有效的 Azure 內容

Set-AzContextSelect-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-AzContextSelect-AzContext 均支援 Scope 參數,讓您可以控制內容的有效期間。 Scope 可讓您直接變更單一工作階段的有效內容,而無須變更您的預設值:

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-AzContextAutosave Cmdlet 停用 Azure Powershell 中的內容自動儲存。 停用內容自動儲存並不會清除任何已儲存的權杖。 若要了解如何清除已儲存的 Azure 內容資訊,請參閱移除 Azure 內容和已儲存的認證

  • 若要明確啟用 Azure 內容自動儲存,可以使用 Enable-AzContextAutosave Cmdlet 來啟用。 自動儲存啟用時,使用者內容都會儲存在本機,以供後續的 PowerShell 工作階段使用。

  • 使用 Save-AzContext 手動儲存內容以供未來的 PowerShell 工作階段使用,並可在 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 中。 敏感性資訊 (例如訂用帳戶識別碼和租用戶識別碼) 可能仍會透過記錄或已儲存的內容公開於已儲存的資訊中。 若要了解如何清除已儲存的資訊,請參閱移除 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-AzContext 移除內容:

    Remove-AzContext -Name MyContextName # Remove by name
    Get-AzContext -Name MyContextName | Remove-AzContext # Remove by piping an Azure context object
    

    如果您移除有效內容,您會與 Azure 中斷連線,而需要使用 Connect-AzAccount 重新驗證。

另請參閱