【PowerShell】ループバック PS セッションとは
Windows PowerShell 3.0 では、PowerShell のセッションから一旦切断して、別のコンピューターから再度接続する...ということが可能になっています。
PowerShell Web Accessを使用すれば自宅からの再接続も可能となり、どこからでも仕事がしたいエンジニアにとっては垂涎の機能です。PSWAを経由すればスマートフォンからでも接続できます。すばらしいです。
ここで、こんな疑問が出てきます。
普通はサーバーに「ローカルログオン」して作業しているから、
そこに再接続できるとうれしいんですけど
はい、可能です。
それがループバック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 コマンドで閉じてしまった場合は残念ながら保存されません。
・・・・・・・・・・・・・・・・・・・
うーん、いまいちだなぁ...と金曜日の夜に物思いにふけるのでした...。