about_PSSession_Details

簡単な説明

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

詳細な説明

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

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

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

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

セッションについて

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

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

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

PSSessions について

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

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

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

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

PSSession が必要な場合

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

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

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

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

PSSession を作成する方法

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

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

リモート コンピューターに接続されている PSSession を作成するには、PowerShell でリモート処理用にコンピューターを構成する必要があります。 現在のユーザーは、リモート コンピューターの 管理istrators グループのメンバーであるか、現在のユーザーが 管理istrators グループのメンバーの資格情報を指定できる必要があります。 詳細については、「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 以降、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 パラメーターまたはセッション パラメーターを使用できます。

コマンドを実行Start-Jobするために使用Invoke-Commandする場合は、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 使用します。 PSSession を削除し、使用していたすべてのリソースを解放します。

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

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

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

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

関連項目