【Management】PowerShell V3.0 で向上したリモーティング機能 その2

 

【PowerShell 3.0 で改善されたセッションの永続化機能】

※ここからはローカルとリモートの両方が PowerShell 3.0 を使用してることを前提としています。

前回は、PowerShell 2.0 でのリモーティング機能についてご紹介しました。

【Management】PowerShell V3.0 で向上したリモーティング機能 その1

今回は、PowerShell 3.0 によって何が改善されるのかについて解説します。この改善は、ワークフローにとって非常に重要であり、この機能なしにワークフローはありえないと言えるでしょう。

PowerShell 2.0 と PowerShell 3.0 とではセッション情報の持ち方が変わりました。

2.0 では New-PSSession を実行したクライアント側にセッション情報が保持されます。そのため、別のクライアントから当該 PSSession を使用することができません。

image

一方 PowerShell 3.0 では、セッションの永続性を確保するためにリモートコンピューター側に PSSession を保持します。そのため、PSSession が生きていれば、別のコンピューターから接続して処理を継続したり、ジョブの状態を確認することができるようになりました。

それに伴い、新しいコマンドレットが追加されています。

  • Connect-PSSession

事前に New-PSSession でセッションを作成しておくことで、いつでも本コマンドレットで再接続することができます。ただし、別のコンピューターから接続されているセッションに接続することはできません。(-Force オプションが見当たりませんでした)

  • Disconnect-PSSession

当該コマンドレットを使用すると、接続中のセッションから切断し、セッションの Status を Disconnect にします。Disconnect のセッションには、別のコンピューターから接続することができます。

  • Receive-PSSession

Disconnect した PSSession からコマンドやジョブの実行結果だけを受け取るためのコマンドレットです。が...私の使い方が悪いのか、現時点ではうまく使えません...。

では、これらのコマンドレットを使って、ものすごく単純な例で試してみましょう。

以下のように、3台のマシンがあるとします。いずれも PowerShell 3.0 がインストールされているマシンです。

image

【社内PCから】

社内の PC で、リモートコンピューターに対して新しいセッションを作成します。

PS C:\> New-PSSession -ComputerName Server1 –Name testSession

Id Name ComputerName State ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 19 testSession Server1 Opened Microsoft.PowerShell Available

testSession というセッションが作成されました。

次に、このセッションに接続します。接続するには Connect-PSSession を使用します。このとき、自分で作ったセッションなので -Name でセッション名だけ指定すれば接続できます。

PS C:\> Connect-PSSession -Name testSession

Id Name ComputerName State ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 19 testSession Server1 Opened Microsoft.PowerShell Available

さらに、このセッションに Enter-PSSesssion で入り込みましょう。

そして、セッションの継続性を確認するために、$a という変数を作り、セッションから抜け出します。

PS C:\> Enter-PSSession -Name testSession [server1]: PS C:\> $a = 1 PS C:\> Exit-PSSession

この状態ではまだセッションに Connect された状態なので、他のコンピューターから接続しようとしてもエラーが発生します。

なので、セッションを Disconnect します。とても重要です。

PS C:\> Disconnect-PSSession -Name testSession

Id Name ComputerName State ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 19 testSession Server1 Disconnected Microsoft.PowerShell None

以上で完了です。

【自宅のPCから】

今度は別のコンピューターに移動します。ここでは「自宅のPC」と仮定しています。

はじめに、サーバー Server1 のセッション状態を確認してみます。State が Disconnect になっていることがわかります。

PS C:\> Get-PSSession –ComputerName Server1

Id Name ComputerName State ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 19 testSession Server1 Disconnected  https://schemas.mi... None

ここに Connect-PSSession しましょう。Disconnected が Opened になったことがわかります。

PS C:\> Connect-PSSession -Name testsession -ComputerName Server1

Id Name ComputerName State ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 27 testSession Server1 Opened        https://schemas.mi... Available

次に Enter-PSSession して、$A の中身を確認してみます。

PS C:\> Enter-PSSession -name testsession [junichia-vdi]: PS C:\> $A 1 [junichia-vdi]: PS C:\>Exit-PSSession

いかがでしょう?非常に単純な例で恐縮なのですが、セッションに再接続できることがご理解いただけたかと思います。

セッションを使い終わったら、かならず Remove-PSSession でセッションを削除しておきましょう。