次の方法で共有


about_PSSession_Details

簡単な説明

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

長い説明

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

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

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

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

セッションについて

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

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

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

PSSessions について

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

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

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

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

PSSession はいつ必要ですか?

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

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

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

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

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

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

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

リモート コンピューターに接続されている PSSession を作成するには、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 以降、Windows コンピューター上の PSSession は、作成されたセッションとは無関係です。 アクティブな PSSession は、接続のリモートまたは "サーバー側" のコンピューターで維持されます。

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

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

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

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

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

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

"アクティブ" PSSession は、コマンドを実行している PSSession です。 PSSession が接続されていて (切断されていない)、接続されたセッションが閉じるときに PSSession でコマンドが実行されている場合、PowerShell はリモート コンピューターで PSSession の維持を試みます。 ただし、PSSession でコマンドが実行されていない場合、接続されているセッションが閉じると、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 パラメーターを使用すると、ジョブ オブジェクトが戻ると 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 。 PSSessions を削除し、使用していたすべてのリソースを解放します。

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

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

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

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

こちらもご覧ください