Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
【PowerShell 3.0 で改善されたセッションの永続化機能】
※ここからはローカルとリモートの両方が PowerShell 3.0 を使用してることを前提としています。
前回は、PowerShell 2.0 でのリモーティング機能についてご紹介しました。
今回は、PowerShell 3.0 によって何が改善されるのかについて解説します。この改善は、ワークフローにとって非常に重要であり、この機能なしにワークフローはありえないと言えるでしょう。
PowerShell 2.0 と PowerShell 3.0 とではセッション情報の持ち方が変わりました。
2.0 では New-PSSession を実行したクライアント側にセッション情報が保持されます。そのため、別のクライアントから当該 PSSession を使用することができません。
一方 PowerShell 3.0 では、セッションの永続性を確保するためにリモートコンピューター側に PSSession を保持します。そのため、PSSession が生きていれば、別のコンピューターから接続して処理を継続したり、ジョブの状態を確認することができるようになりました。
それに伴い、新しいコマンドレットが追加されています。
- Connect-PSSession
事前に New-PSSession でセッションを作成しておくことで、いつでも本コマンドレットで再接続することができます。ただし、別のコンピューターから接続されているセッションに接続することはできません。(-Force オプションが見当たりませんでした)
- Disconnect-PSSession
当該コマンドレットを使用すると、接続中のセッションから切断し、セッションの Status を Disconnect にします。Disconnect のセッションには、別のコンピューターから接続することができます。
- Receive-PSSession
Disconnect した PSSession からコマンドやジョブの実行結果だけを受け取るためのコマンドレットです。が...私の使い方が悪いのか、現時点ではうまく使えません...。
では、これらのコマンドレットを使って、ものすごく単純な例で試してみましょう。
以下のように、3台のマシンがあるとします。いずれも PowerShell 3.0 がインストールされているマシンです。
【社内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 でセッションを削除しておきましょう。