Windows PowerShell によるリモート制御 ~その4 複数セッションの作成と使用 ~

前回は永続的なセッションの作成と削除をする方法について説明しました。

今回は

について説明します。


New-PSSession コマンドレットを使用して、複数のセッションを作成する

前回の記事でも紹介したのですが、New-PSSessionの構文は次の通りとなっています。

[構文]New-PSSession
変数 = New-PSSession -ComputerName コンピュータ名[ , コンピューター名 [,コンピュータ名]…]

 

この構文を使用して、MyServ01というリモートマシンと、ローカルマシンの2つのセッションを同時に作成するには以下のようにします。

PS> $pss = New-PSSession -ComputerName MyServ01, localhost
Id Name            ComputerName    State    ConfigurationName     Availability
-- ----            ------------    -----    -----------------     ------------
1 Session1        MyServ01       Opened   Microsoft.PowerShell     Available
2 Session2        localhost       Opened   Microsoft.PowerShell     Available

セッションは変数に保存せずに

PS> New-PSSession -ComputerName MyServ01, localhost

とすることもできます。

この場合は、Get-PSSessionコマンドレットを使用すれば、下記のように後からでも変数に保存することができます。

PS> New-PSSession -ComputerName htaka2, localhost
PS> $pss = Get-PSSession

 


複数のセッションでコマンドを実行する

複数のセッションに対してコマンドを実行するには Invoke-Command コマンドレットを使用します。

Invoke-Commandコマンドレットの[構文]も前回紹介していますが、再掲します。

[構文]Invoke-Command
Invoke-Command -Session セッション変数 -ScriptBlock {実行するコマンド }

先ほど取得した$pssに入っている2つのセッションに対して Get-ChildItemコマンドレットを使用してみます。

次のコマンドは $pss に格納されているすべてのセッションに対して Get-ChildItem C:\Work を実行します。

Invoke-Command -Session $pss -ScriptBlock { Get-ChildItem C:\Work }
ディレクトリ: C:\Work
Mode LastWriteTime Length Name PSComputerName
---- ------------- ------ ---- --------------
d-r-- 2008/12/03 8:34 WinVista MyServ01
-a--- 2009/01/16 9:55 189434 20090116_095425.xls MyServ01
-a--- 2009/06/16 8:51 59546 cmdlet.txt localhost
-a--- 2008/08/29 10:19 172032 Dtr3035.dll localhost
-a--- 2009/06/24 9:35 4096 hiros.net.MyLib2.dll localhost

結果を見ていただくとわかるのですが、Get-ChildItemコマンドレットを実行すると、PSComputerNameという列が表示されていることがわかります。PSComputerNameはどのコンピュータの結果であるかを示しています。


特定のセッションを使用する

複数のセッションを作成したからといって、常に同時に使用するとは限りません。

作成したセッションの中から特定のセッションに対してだけ、コマンドを実行したい場合もあります。

このような場合には、最初にGet-PSSessionコマンドレットで使用したいセッションのIDを確認します。

Get-PSSession
Id Name            ComputerName    State    ConfigurationName     Availability
-- ----            ------------    -----    -----------------     ------------
1 Session1        MyServ01 Opened   Microsoft.PowerShell     Available
2 Session2        localhost       Opened   Microsoft.PowerShell     Available

次に、セッションIDを指定して、特定のセッションを変数に保存します。

たとえば、MyServ01のセッションを使用したい場合は、上記からセッションIDが1ということがわかります。

この場合は、次のように-Idパラメータを使用してセッションを変数に保存します。

$sess1 = Get-PSSession -Id 1

あとは、Invoke-Commandコマンドレットで、この変数($sess1)を使用すれば、特定のセッションにのみコマンドを実行することができます。

Invoke-Command -Session $sess1 -ScriptBlock { Get-ChildItem C:\Work }

特定のセッションを削除する

特定のセッションを削除するには、Remove-PSSession コマンドレットを使用します。

最初に、削除したいセッションのIDをGet-PSSession コマンドレットで確認しておきます。

次に、Remove-PSSession コマンドレットで-Idパラメータに削除したいIDを指定します。

下記のコマンドはIDが1のセッションを削除します。

Remove-PSSession -Id 1

 

*本記事はWindows XPにインストールしたWindows PowerShell 2.0 RCで検証しております。

コメント

タイトルとURLをコピーしました