about_PSSessions
簡単な説明
Windows PowerShell セッション (PSSessions) について説明し、リモート コンピューターへの永続的な接続を確立する方法について説明します。
詳細な説明
リモート コンピューターで Windows PowerShell コマンドを実行するには、コマンドレットの ComputerName パラメーターを使用するか、Windows PowerShell セッション (PSSession) を作成して PSSession でコマンドを実行します。
PSSession を作成すると、Windows PowerShell は、リモート コンピューターへの永続的な接続を確立します。 PSSession を使用して、リモート コンピューターで一連の関連コマンドを実行します。 同じ PSSession で実行されるコマンドは、変数、エイリアス、関数の値などのデータを共有できます。
ローカル コンピューターで PSSession を作成し、その中でコマンドを実行することもできます。 ローカル PSSession では、Windows PowerShell リモート処理インフラストラクチャを使用して PSSession を作成し、維持します。
Windows PowerShell 3.0 以降、PSSession は作成されるセッションとは無関係です。 アクティブな PSSession は、リモート コンピューター (または接続のリモート 側または "サーバー側" にあるコンピューター) で維持されます。 その結果、PSSession から切断し、後で同じコンピューターまたは別のコンピューターから再接続できます。
このトピックでは、PSSession を作成、使用、取得、および削除する方法について説明します。 詳細については、 about_PSSession_Detailsを参照してください。
注: PSSession では、Windows PowerShell リモート処理インフラストラクチャが使用されます。 PSSessions を使用するには、リモート処理用にローカル コンピューターとリモート コンピューターを構成する必要があります。 詳細については、「about_Remote_Requirements」を参照してください。
Windows Vista 以降のバージョンの Windows では、ローカル コンピューターに PSSession を作成するには、[管理者として実行] オプションを使用して Windows PowerShell を起動する必要があります。
セッションとは
セッションは、Windows PowerShell を実行する環境です。
Windows PowerShell を起動するたびにセッションが作成され、セッションでコマンドを実行できます。 モジュールやスナップインなどの項目をセッションに追加したり、変数、関数、エイリアスなどの項目を作成したりすることもできます。 これらの項目はセッションにのみ存在し、セッションの終了時に削除されます。
また、ローカル コンピューターまたはリモート コンピューターで、"Windows PowerShell セッション" または "PSSessions" と呼ばれるユーザー管理セッションを作成することもできます。 既定のセッションと同様に、PSSession でコマンドを実行し、項目を追加および作成できます。 ただし、自動的に開始されるセッションとは異なり、作成する PSSession を制御できます。 それらを取得、作成、構成、および削除し、切断して再接続し、同じ PSSession で複数のコマンドを実行できます。 PSSession は、削除するかタイムアウトするまで使用できます。
通常、PSSession を作成して、リモート コンピューターで一連の関連コマンドを実行します。 リモート コンピューターで PSSession を作成すると、Windows PowerShell によってリモート コンピューターへの永続的な接続が確立され、セッションがサポートされます。
Invoke-Command
または Enter-PSSession
コマンドレットの ComputerName パラメーターを使用してリモート コマンドを実行するか、対話型セッションを開始すると、Windows PowerShell はリモート コンピューター上に一時的なセッションを作成し、コマンドが完了するとすぐに、または対話型セッションが終了するとすぐにセッションを閉じます。 これらの一時セッションを制御することはできません。また、1 つ以上のコマンドまたは 1 つの対話型セッションに使用することはできません。
Windows PowerShell では、"現在のセッション" は作業中のセッションです。 "現在のセッション" は、一時的なセッションや PSSession を含む任意のセッションを参照できます。
PSSession を使用する理由
リモート コンピューターへの永続的な接続が必要な場合は、PSSession を使用します。 PSSession を使用すると、変数の値、関数の内容、エイリアスの定義など、データを共有する一連のコマンドを実行できます。
PSSession を作成せずにリモート コマンドを実行できます。 リモート対応コマンドレットの ComputerName パラメーターを使用して、1 つまたは複数のコンピューターで 1 つのコマンドまたは一連の関連のないコマンドを実行します。
Invoke-Command
またはEnter-PSSession
の ComputerName パラメーターを使用すると、Windows PowerShell はリモート コンピューターへの一時的な接続を確立し、コマンドが完了するとすぐに接続を閉じます。 作成したデータ要素は、接続が閉じられると失われます。
Get-Eventlog
やGet-WmiObject
など、ComputerName パラメーターを持つその他のコマンドレットでは、さまざまなリモート処理テクノロジを使用してデータを収集します。 PSSession のような永続的な接続は作成しません。
PSSession を作成する方法
PSSession を作成するには、 New-PSSession
コマンドレットを使用します。 リモート コンピューターで PSSession を作成するには、New-PSSession
コマンドレットの ComputerName パラメーターを使用します。
たとえば、次のコマンドは、Server01 コンピューターに新しい PSSession を作成します。
New-PSSession -ComputerName Server01
コマンドを送信すると、 New-PSSession
PSSession が作成され、PSSession を表すオブジェクトが返されます。 PSSession を作成するときにオブジェクトを変数に保存することも、 Get-PSSession
コマンドを使用して後で PSSession を取得することもできます。
たとえば、次のコマンドは、Server01 コンピューターに新しい PSSession を作成し、結果のオブジェクトを$ps変数に保存します。
$ps = New-PSSession -ComputerName Server01
複数のコンピューターで PSSession を作成する方法
複数のコンピューターで PSSession を作成するには、New-PSSession
コマンドレットの ComputerName パラメーターを使用します。 リモート コンピューターの名前をコンマ区切りの一覧に入力します。
たとえば、Server01、Server02、Server03 コンピューターに PSSession を作成するには、次のように入力します。
New-PSSession -ComputerName Server01, Server02, Server03
New-PSSession
は、各リモート コンピューターに 1 つの PSSession を作成します。
PSSessions を取得する方法
現在のセッションで作成された PSSession を取得するには、ComputerName パラメーターを指定せずに Get-PSSession
コマンドレットを使用します。 Get-PSSession
は、 New-PSSession
が返すのと同じ種類のオブジェクトを返します。
次のコマンドは、現在のセッションで作成されたすべての PSSession を取得します。
Get-PSSession
PSSession の既定の表示には、ID と既定の表示名が表示されます。 セッションの作成時に代替表示名を割り当てることができます。
Id Name ComputerName State ConfigurationName
--- ---- ------------ ----- ---------------------
1 Session1 Server01 Opened Microsoft.PowerShell
2 Session2 Server02 Opened Microsoft.PowerShell
3 Session3 Server03 Opened Microsoft.PowerShell
PSSessions を変数に保存することもできます。 次のコマンドは、PSSessions を取得し、$ps 123 変数に保存します。
$ps123 = Get-PSSession
PSSession コマンドレットを使用する場合は、その ID、名前、またはインスタンス ID (GUID) によって PSSession を参照できます。 次のコマンドは、その ID で PSSession を取得し、$ps 01 変数に保存します。
$ps01 = Get-PSSession -Id 1
Windows PowerShell 3.0 以降では、PSSession はリモート コンピューター上で維持されます。 特定のリモート コンピューターで作成した PSSession を取得するには、Get-PSSession
コマンドレットの ComputerName パラメーターを使用します。 次のコマンドは、Server01 リモート コンピューターで作成した PSSession を取得します。 これには、現在のセッションおよびローカル コンピューターまたは他のコンピューター上の他のセッションで作成された PSSession が含まれます。
Get-PSSession -ComputerName Server01
Windows PowerShell 2.0 では、 Get-PSSession
は現在のセッションで作成された PSSession のみを取得します。 セッションが接続されていて、ローカル コンピューターでコマンドを実行している場合でも、他のセッションまたは他のコンピューターで作成された PSSession は取得されません。
PSSession でコマンドを実行する方法
1 つ以上の PSSession でコマンドを実行するには、 Invoke-Command
コマンドレットを使用します。
コマンドを指定するには、Session パラメーターを使用して PSSessions と ScriptBlock パラメーターを指定します。
たとえば、$ps 123 変数に保存されている 3 つの PSSession のそれぞれで Get-ChildItem
("dir") コマンドを実行するには、次のように入力します。
Invoke-Command -Session $ps123 -ScriptBlock { Get-ChildItem }
PSSessions を削除する方法
PSSession が完了したら、 Remove-PSSession
コマンドレットを使用して PSSession を削除し、使用していたリソースを解放します。
Remove-PSSession -Session $ps
または
Remove-PSSession -Id 1
リモート コンピューターから PSSession を削除するには、Remove-PSSession
コマンドレットの ComputerName パラメーターを使用します。
Remove-PSSession -ComputerName Server01 -Id 1
PSSession を削除しない場合、PSSession はタイムアウトするまで使用できます。
New-PSSessionOption
コマンドレットの IdleTimeout パラメーターを使用して、アイドル状態の PSSession の有効期限を設定することもできます。 詳細については、「 New-PSSessionOptionを参照してください。
PSSession コマンドレット
PSSession コマンドレットの一覧については、次のように入力します。
Get-Help *-PSSession
- Connect-PSSession: PSSession を現在のセッションに接続します
- Disconnect-PSSession: 現在のセッションから PSSession を切断します
- Enter-PSSession: 対話型セッションを開始します
- Exit-PSSession: 対話型セッションを終了します
- Get-PSSession: 現在のセッションの PSSession を取得します
- New-PSSession: ローカル コンピューターまたはリモート コンピューターに新しい PSSession を作成します
- Receive-PSSession: 切断されたセッションで実行されたコマンドの結果を取得します
- Remove-PSSession: 現在のセッションの PSSession を削除します
詳細情報
PSSessions の詳細については、 about_PSSession_Detailsを参照してください。
関連項目
PowerShell