【PowerShell】ループバック PS セッションとは

Windows PowerShell 3.0 では、PowerShell のセッションから一旦切断して、別のコンピューターから再度接続する...ということが可能になっています。

image

PowerShell Web Accessを使用すれば自宅からの再接続も可能となり、どこからでも仕事がしたいエンジニアにとっては垂涎の機能です。PSWAを経由すればスマートフォンからでも接続できます。すばらしいです。

image

ここで、こんな疑問が出てきます。

普通はサーバーに「ローカルログオン」して作業しているから、
そこに再接続できるとうれしいんですけど

はい、可能です。

それがループバックPSセッションです。

仕組みも使い方も、リモーティングと全く同じです。

PowerShell コンソールを開いたら、以下のようにしてローカルコンピューターに対して PS セッションを開設します。

PS C:\> $Session = New-PSSession

PS C:\> Enter-PSSession $Session

[LOCALHOST] PS C:\>

プロンプトが [LOCALHOST] となったことに注意してください。これで、ローカルコンピューターに PS セッションを経由して入り込んだことになります。

業が完了したら PowerShell コンソールを閉じる前に以下のコマンドを入力します。

[LOCALHOST] PS C:\> Exit

PS C:\> Disconnect-PSSession $Session

Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- --------
1 Session1 localhost Disconnected Microsoft.PowerShell None

そうすると、これまで行っていた環境は、Session1 という名前で、State=Disconnected(切断中)、Availability=None(誰も使っていない) となり、未使用のセッションとして保存されます。

あとは、のマシンから以下のように入力して再接続することができます。

PS C:\> $MySession = Connect-PSSession –ComputerName <サーバー> –Name Session1

PS C:\> Enter-PSSession $MySession

[サーバー] PS C:\>

で、ですね。

おそらく、こう思うはずなのです。

めんどくせっ!

そうなんです。せめて、PowerShell コンソールを開いたら、自動的にループバックセッションが有効になるようにできれば...と思うわけです。

そこで、この処理をプロファイルに埋め込んでしまう方法を考えてみます。プロファイルに埋め込めば、起動時に自動的にセッションの作成や接続を行ってくれます。

PowerShell プロファイルの場所は、$PROFILE に格納されていますので、確認してください。おそらく、以下のパスだと思います。

C:\Users\<ユーザーID>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

フォルダが無い場合には自分で作り、その下に Microsoft.PowerShell_profile.ps1 ファイルを作成します。テキストファイルです。

メモ帳か PowerShell ISE で開いたら、以下のように入力してください。

$LoopbackPSSessioin = New-PSSession Enter-PSSession $LoopbackPSSessioin

function quit () {    Disconnect-PSSession $LoopbackPSSessioin    exit }

何やってるかわかりますか?

1行目と2行目は、コンソールの起動時に実行されます。つまり、ローカルに PSセッションを張って、そこに乗り込んでいるわけですね。コンソールを起動すると、自動的に以下のような表示になります。

[localhost] : PS C:\Users\administrator.TF\Documents>

そして閉じるときは....

[localhost] : PS C:\> Exit ← これは PS セッションから抜けるため

C:\PS > quit ← $LoopbackPSSession を残すためにこのコマンドで抜ける

と入力します。 Quit コマンドにより、Disconnect-PSSession $LoopbackPSSessioin が実行され、セッションが正常に切断されてコンソールが閉じます。

コンソールを右上の[×]で閉じてしまったり、Exit コマンドで閉じてしまった場合は残念ながら保存されません。

・・・・・・・・・・・・・・・・・・・

うーん、いまいちだなぁ...と金曜日の夜に物思いにふけるのでした...。