about_PSSessions

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

トピック

about_PSSessions

概要

Windows PowerShell セッション (PSSession) と、リモート コンピューターへの永続的な接続の確立方法について説明します。

詳細説明

リモート コンピューターで 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 リモート処理インフラストラクチャを使用します。PSSession を使用するには、ローカル コンピューターとリモート コンピューターをリモート処理用に構成する必要があります。詳細については、「about_Remote_Requirements」を参照してください。

Windows の Windows Vista 以降のバージョンで、ローカル コンピューター上で PSSession を作成するには、[管理者として実行] オプションで Windows PowerShell を起動する必要があります。

セッションとは

セッションとは、Windows PowerShell が実行される環境のことです。

Windows PowerShell を起動するたびにセッションが作成され、そのセッションでコマンドを実行することができます。モジュールやスナップインなどの項目をセッションに追加することもできるほか、変数、関数、エイリアスなどの項目を作成できます。これらの項目はセッション内にのみ存在し、セッションが終了すると削除されます。

ローカル コンピューターまたはリモート コンピューター上には、"Windows PowerShell セッション" または "PSSession" と呼ばれるユーザー管理セッションを作成することもできます。既定のセッションと同様に、PSSession でのコマンドの実行や、項目の追加と作成が可能です。

ただし、自動的に開始するセッションとは異なり、作成した PSSession は制御することができます。PSSession の取得、作成、構成、削除、PSSession からの切断と再接続、同じ PSSession 内での複数コマンドの実行が可能です。PSSession は、削除されるかタイムアウトになるまで引き続き使用できます。

通常は、リモート コンピューター上で一連の関連するコマンドを実行するために PSSession を作成します。リモート コンピューター上に PSSession を作成すると、Windows PowerShell はそのリモート コンピューターへの永続的な接続を確立してセッションをサポートします。

Invoke-Command または Enter-PSSession コマンドレットの ComputerName パラメーターを使用して、リモート コマンドを実行するか、対話型セッションを開始した場合、Windows PowerShell はリモート コンピューター上で一時セッションを作成し、コマンドが完了するか対話型セッションが終了するとすぐにセッションを閉じます。これらの一時セッションを制御することはできません。また、複数のコマンドまたは対話型セッションに使用することもできません。

Windows PowerShell では、"現在のセッション" とは作業に使用しているセッションのことです。"現在のセッション" は、場合によって一時セッションや PSSession を含むすべてのセッションを意味します。

PSSession を使用する理由

リモート コンピューターへの永続的な接続が必要な場合は、PSSession を使用します。PSSession を使用すると、変数の値、関数の内容、エイリアスの定義などのデータを共有する一連のコマンドを実行できます。

リモート コマンドは、PSSession を作成しなくても実行できます。単独のコマンドまたは関連性のない一連のコマンドを 1 台以上のコンピューターで実行するには、リモート対応コマンドレットの ComputerName パラメーターを使用します。

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 によって、各リモート コンピューター上に PSSession が 1 つ作成されます。

PSSession を取得する方法

現在のセッションで作成した PSSession を取得するには、ComputerName パラメーターを指定せずに Get-PSSession コマンドレットを使用します。Get-PSSession は、New-PSSession によって返されるオブジェクトと同じ型のオブジェクトを返します。ここにセクション本体を挿入します。

次のコマンドは、現在のセッションで作成された PSSession をすべて取得します。

        Get-PSSession

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

PSSession を変数に保存することもできます。次のコマンドは、PSSession を取得して $ps123 変数に保存します。

        $ps123 = Get-PSSession

PSSession コマンドレットを使用する場合は、ID、名前、またはインスタンス ID (GUID) によって PSSession を参照できます。次のコマンドは、ID 別に PSSession を取得し、それを $ps01 変数に保存します。

        $ps01 = Get-PSSession -Id 1

Windows PowerShell 3.0 以降では、PSSession はリモート コンピューター上で維持されます。特定のリモート コンピューター上に作成した PSSession を取得するには、Get-PSSession コマンドレットの ComputerName パラメーターを使用します。次のコマンドは、Server01 リモート コンピューター上に作成した PSSession を取得します。これには、現在のセッションで作成された PSSession と、ローカル コンピューターまたはその他のコンピューター上の他のセッションで作成された PSSession が含まれます。

        Get-PSSession -ComputerName Server01

Windows PowerShell 2.0 では、Get-PSSession は現在のセッションで作成された PSSession のみを取得します。他のセッションまたは他のコンピューターに作成された PSSession は、そのセッションがローカル コンピューターに接続し、そこでコマンドを実行している場合でも取得しません。

PSSession でコマンドを実行する方法

1 つまたは複数の PSSession でコマンドを実行するには、Invoke-Command コマンドレットを使用します。Session パラメーターを使用して PSSession を指定し、ScriptBlock パラメーターを使用してコマンドを指定します。

たとえば、$ps123 変数に保存した 3 つの PSSession のそれぞれで Get-ChildItem ("dir") コマンドを実行するには、次のように入力します。

        Invoke-Command -Session $ps123 -ScriptBlock {Get-ChildItem}

PSSession を削除する方法

PSSession での作業が完了したら、Remove-PSSession コマンドレットを使用して 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 コマンドレット

    Cmdlet                Description
    -----------------     ------------------------------------------------------
    New-PSSession         Creates a new PSSession on a local or remote computer.

    Get-PSSession         Gets the PSSessions in the current session.

    Remove-PSSession      Deletes the PSSessions in the current session.

    Enter-PSSession       Starts an interactive session.

    Exit-PSSession        Ends an interactive session.
    
    Disconnect-PSSession  Disconnects a PSSession from the current session.

    Connect-PSSession     Connects a PSSession to the current session.
     
    Receive-PSSession     Gets the results of commands that ran in a disconnected
                          session.

PSSession コマンドレットの一覧を表示するには、次のように入力します。

       get-help *-PSSession

詳細情報の参照先

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

関連項目

about_Remote に関するページ

about_Remote_Disconnected_Sessions

about_Remote_Requirements

Connect-PSSession

Disconnect-PSSession

Enter-PSSession

Exit-PSSession

Get-PSSession

Invoke-Command

New-PSSession

Remove-PSSession