次の方法で共有


about_PSSession_Details

簡単な説明

Windows PowerShell セッションと、リモート コマンドで果たす役割に関する詳細情報を提供します。

詳細な説明

セッションは、Windows PowerShell を実行する環境です。 Windows PowerShell を起動するたびにセッションが作成されます。 コンピューターまたは別のコンピューターで、"Windows PowerShell セッション" または "PSSessions" と呼ばれる追加のセッションを作成できます。

Windows PowerShell によって作成されるセッションとは異なり、作成する PSSession を制御および管理します。

PSSessions は、リモート コンピューティングにおいて重要な役割を果たします。 リモート コンピューターに接続されている PSSession を作成すると、Windows PowerShell は PSSession をサポートするためにリモート コンピューターへの永続的な接続を確立します。 PSSession を使用して、データを共有する一連のコマンド、関数、スクリプトを実行できます。

このトピックでは、Windows PowerShell のセッションと PSSession について詳しく説明します。 セッションで実行できるタスクの基本情報については、 about_PSSessionsを参照してください。

セッションについて

技術的には、セッションは Windows PowerShell を実行する実行環境です。 各セッションには、System.Management.Automation エンジンのインスタンスと、Windows PowerShell を実行するホスト プログラムが含まれます。 ホストには、使い慣れた Windows PowerShell コンソールや、Cmd.exeなどのコマンドを実行する別のプログラム、または Windows PowerShell 統合スクリプト環境 (ISE) などの Windows PowerShell をホストするために構築されたプログラムを使用できます。 Windows の観点からは、セッションはターゲット コンピューター上の Windows プロセスです。

各セッションは個別に構成されます。 独自のプロパティ、独自の実行ポリシー、および独自のプロファイルが含まれています。 セッションの作成時に存在する環境は、コンピューター上の環境を変更しても存続します。 すべてのセッションは、スクリプトで作成したセッションであっても、グローバル スコープで作成されます。

1 つのセッションで一度に実行できるコマンド (またはコマンド パイプライン) は 1 つだけです。 2 番目のコマンドは同期的に (一度に 1 つずつ) 実行され、最初のコマンドが完了するまで最大 4 分待機します。 2 つ目のコマンドは非同期的に (同時に) 実行できません。

PSSessions について

セッションは、Windows PowerShell を起動するたびに作成されます。 また、Windows PowerShell では、個々のコマンドを実行するための一時的なセッションが作成されます。 ただし、制御および管理するセッション ("Windows PowerShell セッション" または "PSSessions" と呼ばれます) を作成することもできます。

PSSession はリモート コマンドにとって非常に重要です。 Invoke-CommandまたはEnter-PSSession コマンドレットの ComputerName パラメーターを使用すると、Windows PowerShell はコマンドを実行するための一時的なセッションを確立し、コマンドまたは対話型セッションが完了するとすぐにセッションを閉じます。

ただし、 New-PSSession コマンドレットを使用して PSSession を作成すると、Windows PowerShell はリモート コンピューターで永続的なセッションを確立し、複数のコマンドまたは対話型セッションを実行できます。 作成した PSSession は、削除するまで、または作成されたセッションを閉じるまで、開いたままで使用できます。

リモート コンピューターで PSSession を作成すると、システムはリモート コンピューターに PowerShell プロセスを作成し、ローカル コンピューターからリモート コンピューター上のプロセスへの接続を確立します。 ローカル コンピューターで PSSession を作成すると、新しいプロセスと接続の両方がローカル コンピューターに作成されます。

PSSession が必要な場合

Invoke-Command および Enter-PSSession コマンドレットには、ComputerName パラメーターと Session パラメーターの両方があります。 いずれかを使用してリモート コマンドを実行できます。

ComputerName パラメーターを使用して、1 つまたは複数のコンピューターで 1 つのコマンドまたは一連の関連のないコマンドを実行します。

データを共有するコマンドを実行するには、リモート コンピューターへの永続的な接続が必要です。 その場合は、PSSession を作成し、 Session パラメーターを使用して PSSession でコマンドを実行します。

Get-ProcessGet-ServiceGet-EventLogGet-WmiObjectなど、リモート コンピューターからデータを取得する他の多くのコマンドレットには、ComputerName パラメーターしかありません。 Windows PowerShell リモート処理以外のテクノロジを使用して、リモートでデータを収集します。 これらのコマンドレットには Session パラメーターはありませんが、 Invoke-Command コマンドレットを使用して PSSession でこれらのコマンドを実行できます。

PSSession を作成する方法

PSSession を作成するには、 New-PSSession コマンドレットを使用します。 New-PSSessionを使用して、ローカル コンピューターまたはリモート コンピューターに PSSession を作成できます。

任意のコンピューターで PSSession を作成できますか?

リモート コンピューターに接続されている PSSession を作成するには、Windows PowerShell でリモート処理用にコンピューターを構成する必要があります。 現在のユーザーは、リモート コンピューターの Administrators グループのメンバーであるか、現在のユーザーが Administrators グループのメンバーの資格情報を指定できる必要があります。 詳細については、「about_Remote_Requirements」を参照してください。

他のセッションで PSSession を確認できますか?

Windows PowerShell 3.0 以降では、Get-PSSession コマンドレットの ComputerName パラメーターは、指定したリモート コンピューターで作成した PSSession を取得します。

アクティブな PSSession はリモート コンピューター (接続の "サーバー側") で維持され、任意のコンピューター上の任意のセッションから取得できます。

たとえば、Server01 コンピューターから Server02 コンピューターに PSSession を作成し、Server03 コンピューターに切り替える場合は、次のようなコマンドを使用してセッションを取得できます。

Get-PSSession -ComputerName Server02

セッションから切断した場合でも、セッションを削除するかタイムアウトするまで、セッションはリモート コンピューター上で維持されます。

Windows PowerShell 2.0 では、現在のセッションで作成した PSSession のみを取得できます。 他のセッションで作成した PSSession は取得できません。

詳細については、「 Get-PSSessionを参照してください。

他のユーザーが自分のコンピューターで作成した PSSession を確認できますか?

PSSession を作成したユーザーの資格情報を指定できる場合、または PSSession で使用されるセッション構成に RunAs 資格情報が含まれている場合にのみ、他のユーザーが作成した PSSession のみを取得および管理できます。 それ以外の場合は、作成した PSSession のみを取得、接続、使用、管理できます。

別のコンピューターから PSSession に接続できますか?

Windows PowerShell 3.0 以降、PSSession は作成されたセッションとは無関係です。 アクティブな PSSession は、接続のリモートまたは "サーバー側" のコンピューターで維持されます。

Disconnect-PSSession コマンドレットを使用して、PSSession から切断できます。 PSSession はローカル セッションから切断されますが、リモート コンピューターでは維持されます。 コマンドは、切断された PSSession で引き続き実行されます。 PSSession を中断することなく、Windows PowerShell を閉じて、元のコンピューターをシャットダウンできます。

その後、数時間後にも、 Get-PSSession コマンドレットを使用して PSSession と Connect-PSSession コマンドレットを取得し、別のコンピューター上の新しいセッションから PSSession に接続できます。

詳細については、「 about_Remote_Disconnected_Sessions」を参照してください。

コンピューターが停止した場合、PSSession はどうなりますか?

切断された PSSession は、作成されたセッションとは無関係です。 PSSession を切断してから、元のコンピューターを閉じると、PSSession はリモート コンピューター上で維持されます。

さらに、Windows PowerShell は、コンピューターの再起動、一時的な停電、ネットワークの中断など、意図せずに切断されたアクティブな PSSession を回復しようとします。 Windows PowerShell は、元のセッションがまだ使用可能な場合は、開かれた状態に PSSession を維持または回復しようとします。存在しない場合は切断状態になります。

"アクティブ" PSSession は、コマンドを実行している PSSession です。 PSSession が接続されていて (切断されていない)、接続されたセッションが閉じたときに PSSession でコマンドが実行されている場合、Windows PowerShell はリモート コンピューターで PSSession の維持を試みます。 ただし、PSSession でコマンドが実行されていない場合、接続されているセッションが閉じると、Windows PowerShell によって PSSession が閉じられます。

詳細については、「 about_Remote_Disconnected_Sessions」を参照してください。

PSSession でバックグラウンド ジョブを実行できますか?

はい。 バックグラウンド ジョブは、現在のセッションと対話せずにバックグラウンドで非同期的に実行されるコマンドです。 ジョブを開始するコマンドを送信すると、コマンドはジョブ オブジェクトを返しますが、ジョブは完了するまでバックグラウンドで実行され続けます。

ローカル コンピューターでバックグラウンド ジョブを開始するには、 Start-Job コマンドを使用します。 バックグラウンド ジョブは、一時的な接続 ( ComputerName パラメーターを使用) または PSSession ( Session パラメーターを使用して) で実行できます。

リモート コンピューターでバックグラウンド ジョブを開始するには、AsJob パラメーターで Invoke-Command コマンドレットを使用するか、Invoke-Command コマンドレットを使用してリモート コンピューターで Start-Job コマンドを実行します。 AsJob パラメーターを使用する場合は、ComputerName または Session パラメーターを使用できます。

Invoke-Commandを使用して Start-Job コマンドを実行する場合は、PSSession でコマンドを実行する必要があります。 ComputerName パラメーターを使用すると、Windows PowerShell はジョブ オブジェクトが戻ったときに接続を終了し、ジョブが中断されます。

詳細については、「about_Jobs」を参照してください。

対話型セッションを実行できますか?

はい。 リモート コンピューターとの対話型セッションを開始するには、 Enter-PSSession コマンドレットを使用します。 対話型セッションでは、リモート コンピューターで直接入力した場合と同様に、入力したコマンドがリモート コンピューターで実行されます。

対話型セッションは、一時セッション ( ComputerName パラメーターを使用) または PSSession ( Session パラメーターを使用して) で実行できます。 PSSession を使用する場合、PSSession は前のコマンドのデータを保持し、PSSession は後のコマンドで使用するために対話型セッション中に生成されたデータを保持します。

対話型セッションを終了しても、PSSession は開いたままで使用できます。

詳細については、「 Enter-PSSession および Exit-PSSessionを参照してください。

PSSessions を削除する必要がありますか?

はい。 PSSession は、メモリやその他のリソースを使用しない場合でも使用する自己完結型環境であるプロセスです。 PSSession が完了したら、それを削除します。 複数の PSSession を作成する場合は、使用していない PSSession を閉じて、現在使用中の PSSession のみを保持します。

PSSessions を削除するには、 Remove-PSSession コマンドレットを使用します。 PSSession を削除し、使用していたすべてのリソースを解放します。

New-PSSessionOptionIdleTimeOut パラメーターを使用して、指定した間隔の後にアイドル状態の PSSession を閉じることもできます。 詳細については、「 New-PSSessionOptionを参照してください。

PSSession オブジェクトを変数に保存し、PSSession を削除するかタイムアウトにした場合、変数には PSSession オブジェクトが含まれますが、PSSession はアクティブではなく、使用または修復できません。

すべてのセッションと PSSession は同じですか?

いいえ。 開発者は、選択したプロバイダーとコマンドレットのみを含むカスタム セッションを作成できます。 あるセッションでは動作するが、別のセッションでは機能しないコマンドは、セッションが制限されていることが原因である可能性があります。

関連項目