前回の記事でPowerShellにおけるセッションの話をしました。
今回は
について説明します。
New-PSSessionコマンドレットによる永続的なセッションの作成
前回のEnter-PSSessionで作成したセッションは一時的なものであり、コマンドまたは対話型のセッションが完了するとそのセッションを閉じます。
しかし、New-PSSessionコマンドレットを使用すると、複数のコマンドや対話型のセッションを実行できる永続的なセッションを作成することができます。
構文は
変数 = New-PSSession -ComputerName コンピュータ名[ , コンピューター名 [,コンピュータ名]…]
です。
たとえば、MyServe01というリモートコンピュータとの永続的なセッションを作成するには
$s = New-PSSession -ComputerName MyServe01
とします。
この場合は$sにセッション情報が作成されます。
作成されたセッションを確認するには Get-PSSessionコマンドレットを実行します
PS> Get-PSSession Id Name ComputerName State ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 1 Session1 MyServ01 Opened Microsoft.PowerShell Available
MyServe01とのセッションの名前(Name)はSession1として作成され、開かれている(StateがOpend)ことがわかります。
このようにして作成したセッションは Invoke-Command コマンドレットで使用することができます。
構文は
Invoke-Command -Session セッション変数 -ScriptBlock {実行するコマンド}
です。
実際には、New-PSSessionで作成したセッションを代入した変数を -Sessionパラメータに指定し
Invoke-Command -Session $s -ScriptBlock { Get-date }
のように書きます。
この場合は、リモートコンピュータMyServ01 上で Get-Date コマンドレットを実行します。
このように、New-Sessionコマンドレットを使用して作成したセッションは変数に保存されているので、好きなときに何度でも使用することが可能になります。
Remove-PSSessionコマンドレットによるセッションの削除
作成したセッション(PSSession)はプロセスであるため、ユーザーが使用しない場合でもメモリなどのリソースを消費してしまいます。
要らなくなったセッションは Remove-PSSession コマンドレットで削除することができます。
このコマンドレットを使用するとPSSessionを削除し、PSSessionnによって使用されていたリソースが解放されます。
PS> Remove-PSSession
*本記事はWindows XPにインストールしたWindows PowerShell 2.0 RCで検証しております。
コメント
Remove-PSSessionする前にDisconnect-PSSessionする必要はありますか?
別に後から再度接続する予定がなければ必要が無いように思いますが、うちの職場の作法として必用らしいのですが・・・。
Remove-PSSessionでエラーが起き、スクリプトが終了してコンソールが閉じてしまった場合、セッションは残ってしまうのでしょうか?
それとも一定の時間で切断して削除されてしまうのでしょうか?(Disconnect-PSSessionした状態でそのままだと2時間くらいで削除されるらしいですが)
またはコンソール画面が閉じてしまった時点で削除されてしまうのでしょうか?
そのあたりがハッキリ書かれているものが見つからなくて困っています。