PowerShell セッション間でユーザーの資格情報を保持するPersist user credentials across PowerShell sessions

Azure PowerShell では、Azure Context Autosave と呼ばれる機能を提供しています。その機能は以下のとおりです。Azure PowerShell offers a feature called Azure Context Autosave, which gives the following features:

  • 新しい PowerShell セッションで再利用するためにサインイン情報を保持する。Retention of sign-in information for reuse in new PowerShell sessions.
  • 実行時間の長いコマンドレットを実行する場合にバックグラウンド タスクを使いやすくする。Easier use of background tasks for executing long-running cmdlets.
  • 個別のサインインを使用せずにアカウント、サブスクリプション、環境を切り替える。Switch between accounts, subscriptions, and environments without a separate sign-in.
  • 同一の PowerShell セッションから、異なる資格情報やサブスクリプションを同時に使用してタスクを実行する。Execution of tasks using different credentials and subscriptions, simultaneously, from the same PowerShell session.

Azure コンテキストの定義Azure contexts defined

"Azure コンテキスト" とは、Azure PowerShell コマンドレットの対象を定義する一連の情報です。An Azure context is a set of information that defines the target of Azure PowerShell cmdlets. このコンテキストは、次の 5 つの要素で構成されます。The context consists of five parts:

  • "アカウント" - Azure との通信の認証に使用されるユーザー名またはサービス プリンシパル。An Account - the UserName or Service Principal used to authenticate communications with Azure
  • "サブスクリプション" - 処理対象のリソースを含む Azure サブスクリプション。A Subscription - The Azure Subscription with the Resources being acted upon.
  • "テナント" - サブスクリプションを含む Azure Active Directory テナント。A Tenant - The Azure Active Directory tenant that contains your subscription. テナントは、サービス プリンシパル認証にとってより重要になります。Tenants are more important to ServicePrincipal authentication.
  • "環境" - 対象となる特定の Azure クラウド (通常は Azure グローバル クラウド)。An Environment - The particular Azure Cloud being targeted, usually the Azure global Cloud. ただし、環境設定では、国内、政府、オンプレミス (Azure Stack) クラウドも対象にすることができます。However, the environment setting allows you to target National, Government, and on-premises (Azure Stack) clouds as well.
  • "資格情報" - 本人確認と Azure のリソースへのアクセスの承認のために Azure で使用される情報Credentials - The information used by Azure to verify your identity and confirm your authorization to access resources in Azure

以前のリリースでは、新しい PowerShell セッションを開くたびに Azure コンテキストを作成する必要がありました。In previous releases, an Azure Context had to be created each time you opened a new PowerShell session. Azure PowerShell v4.4.0 以降では、新しい PowerShell セッションを開くたびに Azure コンテキストを自動的に保存できます。Beginning with Azure PowerShell v4.4.0, Azure Contexts can automatically be saved whenever opening a new PowerShell session.

次回サインインのためのコンテキストの自動保存Automatically save the context for the next sign-in

バージョン 6.3.0 以降、Azure PowerShell では、セッション間で自動的にコンテキスト情報が保持されます。In versions 6.3.0 and later, Azure PowerShell retains your context information automatically between sessions. コンテキストと資格情報を記憶しないように PowerShell を設定するには、Disable-AzureRmContextAutoSave を使用します。To set PowerShell to forget your context and credentials, use Disable-AzureRmContextAutoSave. PowerShell セッションを開くたびに Azure へのサインインが必要になります。You'll need to sign in to Azure every time you open a PowerShell session.

PowerShell セッションが終了した後に Azure PowerShell がコンテキストを記憶できるようにするには、Enable-AzureRmContextAutosave を使用します。To allow Azure PowerShell to remember your context after the PowerShell session is closed, use Enable-AzureRmContextAutosave. コンテキストと資格情報は、ユーザー ディレクトリの特殊な隠しフォルダー (%AppData%\Roaming\Windows Azure PowerShell) に自動的に保存されます。Context and credential information are automatically saved in a special hidden folder in your user directory (%AppData%\Roaming\Windows Azure PowerShell). 新しい PowerShell セッションそれぞれで、最後のセッションで使用されたコンテキストが対象となります。Each new PowerShell session targets the context used in your last session.

Azure コンテキストを管理できるコマンドレットを使用すると、きめ細かな制御も可能になります。The cmdlets that allow you to manage Azure contexts also allow you fine grained control. 変更を現在の PowerShell セッションのみ (Process スコープ) とすべての PowerShell セッション (CurrentUser スコープ) のどちらに適用するかを制御できます。If you want changes to apply only to the current PowerShell session (Process scope) or every PowerShell session (CurrentUser scope). これらのオプションについては、「コンテキスト スコープの使用」で詳しく説明します。These options are discussed in mode detail in Using Context Scopes.

バックグラウンド ジョブとしての Azure PowerShell コマンドレットの実行Running Azure PowerShell cmdlets as background jobs

Azure Context Autosave 機能を使用すると、コンテキストを PowerShell のバックグラウンド ジョブと共有することもできます。The Azure Context Autosave feature also allows you to share you context with PowerShell background jobs. PowerShell を使用すると、実行時間の長いタスクをバックグラウンド ジョブとして開始および監視できます。タスクが完了するのを待つ必要はありません。PowerShell allows you to start and monitor long-executing tasks as background jobs without having to wait for the tasks to complete. 資格情報をバックグラウンド ジョブと共有するには、次の 2 つの方法があります。You can share credentials with background jobs in two different ways:

  • コンテキストを引数として渡すPassing the context as an argument

    ほとんどの AzureRM コマンドレットでは、コンテキストをパラメーターとしてコマンドレットに渡すことができます。Most AzureRM cmdlets allow you to pass the context as a parameter to the cmdlet. 次の例に示すように、バックグラウンド ジョブにコンテキストを渡すことができます。You can pass a context to a background job as shown in the following example:

    PS C:\> $job = Start-Job { param ($ctx) New-AzureRmVm -AzureRmContext $ctx [... Additional parameters ...]} -ArgumentList (Get-AzureRmContext)
    
  • 自動保存を有効にした状態で既定のコンテキストを使用するUsing the default context with Autosave enabled

    Context Autosave を有効にした場合、バックグラウンド ジョブは、既定で保存されているコンテキストを自動的に使用します。If you have enabled Context Autosave, background jobs automatically use the default saved context.

    PS C:\> $job = Start-Job { New-AzureRmVm [... Additional parameters ...]}
    

バックグラウンド タスクの結果を知っておく必要がある場合は、Get-Job を使用してジョブの状態を確認し、Wait-Job を使用してジョブの完了を待ちます。When you need to know the outcome of the background task, use Get-Job to check the job status and Wait-Job to wait for the Job to complete. バックグラウンド ジョブの出力をキャプチャまたは表示するには、Receive-Job を使用します。Use Receive-Job to capture or display the output of the background job. 詳細については、「about_Jobs」を参照してください。For more information, see about_Jobs.

コンテキストの作成、選択、名前変更、削除Creating, selecting, renaming, and removing contexts

コンテキストを作成するには、Azure にサインインしている必要があります。To create a context, you must be signed in to Azure. Connect-AzureRmAccount コマンドレット (またはそのエイリアス Login-AzureRmAccount) は、Azure PowerShell コマンドレットで使用される既定のコンテキストを設定し、資格情報で許可されているテナントまたはサブスクリプションへのアクセスを許可します。The Connect-AzureRmAccount cmdlet (or its alias, Login-AzureRmAccount) sets the default context used by Azure PowerShell cmdlets, and allows you to access any tenants or subscriptions allowed by your credentials.

サインイン後に新しいコンテキストを追加するには、Set-AzureRmContext (またはそのエイリアス Select-AzureRmSubscription) を使用します。To add a new context after sign-in, use Set-AzureRmContext (or its alias, Select-AzureRmSubscription).

PS C:\> Set-AzureRMContext -Subscription "Contoso Subscription 1" -Name "Contoso1"

前の例では、現在の資格情報を使用して、"Contoso Subscription 1" を対象とした新しいコンテキストを追加します。The previous example adds a new context targeting 'Contoso Subscription 1' using your current credentials. 新しいコンテキストの名前は "Contoso1" です。The new context is named 'Contoso1'. コンテキストに名前を指定しない場合は、アカウント ID とサブスクリプション ID を使用した既定の名前が使用されます。If you don't provide a name for the context, a default name, using the account ID and subscription ID is used.

既存のコンテキストの名前を変更するには、Rename-AzureRmContext コマンドレットを使用します。To rename an existing context, use the Rename-AzureRmContext cmdlet. 例: For example:

PS C:\> Rename-AzureRmContext '[user1@contoso.org; 123456-7890-1234-564321]` 'Contoso2'

この例では、自動的に [user1@contoso.org; 123456-7890-1234-564321] という名前の付いたコンテキストの名前を簡単な名前 "Contoso2" に変更します。This example renames the context with automatic name [user1@contoso.org; 123456-7890-1234-564321] to the simple name 'Contoso2'. コンテキストを管理するコマンドレットではタブ補完も使用されているため、コンテキストをすばやく選択できます。Cmdlets that manage contexts also use tab completion, allowing you to quickly select the context.

最後に、コンテキストを削除するには、Remove-AzureRmContext コマンドレットを使用します。Finally, to remove a context, use the Remove-AzureRmContext cmdlet. 例: For example:

PS C:\> Remove-AzureRmContext Contoso2

"Contoso2" という名前のコンテキストは記憶されません。Forgets the context that was named 'Contoso2'. Set-AzureRmContext を使用して、このコンテキストを再作成できますYou can recreate this context using Set-AzureRmContext

資格情報の削除Removing credentials

Disconnect-AzureRmAccount (別名 Logout-AzureRmAccount) を使用して、ユーザーまたはサービス プリンシパルの資格情報と関連付けられたコンテキストをすべて削除できます。You can remove all credentials and associated contexts for a user or service principal using Disconnect-AzureRmAccount (also known as Logout-AzureRmAccount). Disconnect-AzureRmAccount コマンドレットをパラメーターを指定せずに実行すると、現在のコンテキストのユーザーまたはサービス プリンシパルに関連付けられた資格情報とコンテキストがすべて削除されます。When executed without parameters, the Disconnect-AzureRmAccount cmdlet removes all credentials and contexts associated with the User or Service Principal in the current context. 特定のプリンシパルを対象とするために、ユーザー名、サービス プリンシパル名、またはコンテキストを渡すこともできます。You may pass in a Username, Service Principal Name, or context to target a particular principal.

Disconnect-AzureRmAccount user1@contoso.org

コンテキスト スコープの使用Using context scopes

場合によっては、他のセッションに影響を与えることなく、PowerShell セッションでコンテキストを選択、変更、または削除することもできます。Occasionally, you may want to select, change, or remove a context in a PowerShell session without impacting other sessions. コンテキストのコマンドレットの既定の動作を変更するには、Scope パラメーターを使用します。To change the default behavior of context cmdlets, use the Scope parameter. Process スコープは、現在のセッションのみに適用されるようにすることで、既定の動作をオーバーライドします。The Process scope overrides the default behavior by making it apply only for the current session. 逆に、CurrentUser スコープは、現在のセッションだけでなく、すべてのセッションのコンテキストを変更します。Conversely CurrentUser scope changes the context in all sessions, instead of just the current session.

たとえば、他のウィンドウに影響を与えることなく現在の PowerShell セッションの既定のコンテキストを変更したり、次にセッションを開いたときに使用されるコンテキストを変更したりするには、次を使用します。As an example, to change the default context in the current PowerShell session without impacting other windows, or the context used the next time a session is opened, use:

PS C:\> Select-AzureRmContext Contoso1 -Scope Process

コンテキストの自動保存設定を記憶する方法How the context autosave setting is remembered

コンテキストの自動保存設定は、ユーザーの Azure PowerShell ディレクトリ (%AppData%\Roaming\Windows Azure PowerShell) に保存されます。The context AutoSave setting is saved to the user Azure PowerShell directory (%AppData%\Roaming\Windows Azure PowerShell). コンピューター アカウントの中には、このディレクトリにアクセスできないものがあります。Some kinds of computer accounts may not have access to this directory. このようなシナリオでは、環境変数を使用できます。For such scenarios, you can use the environment variable

$env:AzureRmContextAutoSave="true" | "false"

"true" に設定すると、コンテキストは自動的に保存されます。When set to 'true', the context is automatically saved. "false" に設定した場合、コンテキストは保存されません。If set to 'false', the context isn't saved.

AzureRM.Profile モジュールの変更点Changes to the AzureRM.Profile module

コンテキスト管理用の新しいコマンドレットNew cmdlets for managing context

既存のプロファイル コマンドレットの変更Changes to existing profile cmdlets

  • Add-AzureRmAccount - サインインのスコープをプロセスまたは現在のユーザーにすることを許可します。Add-AzureRmAccount - Allow scoping of the sign-in to the process or the current user. 認証後に既定のコンテキストに名前を付けることができます。Allow naming the default context after authentication.
  • Import-AzureRmContext - サインインのスコープをプロセスまたは現在のユーザーにすることを許可します。Import-AzureRmContext - Allow scoping of the sign-in to the process or the current user.
  • Set-AzureRmContext - 既存の名前付きコンテキストの選択と、プロセスまたは現在のユーザーへのスコープの変更を許可します。Set-AzureRmContext - Allow selection of existing named contexts, and scope changes to the process or current user.