次の方法で共有


PSSession の詳細について

簡単な説明

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

長い説明

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

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

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

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

セッションについて

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

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

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

PSSessions について

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

PSSessions は、リモート コマンドにとって重要です。 または Enter-PSSession コマンドレットの Invoke-CommandComputerName パラメーターを使用する場合は、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-EventLog、リモート コンピューターからデータを取得しGet-WmiObjectComputerName パラメーターのみを持つ他の多くのコマンドレット。 リモート処理Windows PowerShell以外のテクノロジを使用して、リモートでデータを収集します。 これらのコマンドレットには Session パラメーターはありませんが、 コマンドレットを Invoke-Command 使用して PSSession でこれらのコマンドを実行できます。

PSSession をCreateするにはどうすればよいですか?

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

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

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

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

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

アクティブな 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 以降、PSSessions は作成されたセッションに依存しません。 アクティブな 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 パラメーターまたはセッション パラメーターを使用できます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参照

about_Jobs

about_PSSessions

about_Remote

about_Remote_Disconnected_Sessions

about_Remote_Requirements

Invoke-Command

Enter-PSSession

Exit-PSSession

Get-PSSession

New-PSSession

Remove-PSSession