複数のセッションを作成する
今度は1度に複数のセッションを作成してみましょう。複数のセッションを作成する場合もNew-PSSessionを使用します。-ComputerNameパラメータの後ろに、セッションを作成するリモートコンピューターをカンマで区切って指定します。
例えば、次のコマンドはHIRO-MACPCとHIRO-WIN7というコンピューターにセッションを作成します(図10)。
$pss = New-PSSession -ComputerName HIRO-MACPC, HIRO-WIN7
ここで作成したセッション$pssにはHIRO-MACPCとHIRO-WIN7の2つのセッションが格納されます。
先ほど紹介したInvoke-Commandコマンドレットでこの$pssセッションを使用すると、一度に複数のリモートコンピューターに対してコマンドを実行します。たとえば
Invoke-Command -Session $pss -ScriptBlock {Get-ChildItem C:\}
とすると、HIRO-MACPCとHIRO-WIN7の両方に対してGet-ChildItemコマンドレットを実行することになります。結果として、両方のリモートコンピューターの「C:\」のファイルリストが表示されます(図11)。
Get-ChildItemコマンドレットの場合は、一番右端にどのコンピューターであるかを示すPSComputerName列が表示されます。$pssには複数のセッションが入っていますが、これを別々に分けて使用することもできます。実際には$pssは複数のセッションがまとめられているだけであり、Get-PSSessionコマンドレットで個々のセッション情報を確認できます(図12)。
例えば、$pssに格納されているHIRO-MACPCのセッションはセッションIDが2なので
$ps2 = Get-PSSession -Id 2
のようにしてセッションを取得し、
Invoke-Command -Session $ps2 -ScriptBlock {Get-ChildItem C:\}
のようにすることで、HIRO-MACPCに対するセッションでコマンドを実行することができます。
-ComputerNameパラメータを持つコマンドレット
ここまではセッションを使用したリモートコンピューターの操作について説明してきました。PowerShell 2.0ではセッションを作成しなくても、リモートコンピューター操作できるコマンドレットがあります。それは-ComputerNameというパラメータを持つコマンドレットです。
-ComputerNameパラメータを持つコマンドレットには以下のようなものがあります。
| Clear-EventLog | Connect-WSMan | Disconnect-WSMan | Enter-PSSession | Get-Counter |
| Get-EventLog | Get-HotFix | Get-Process | Get-PSSession | Get-Service |
| Get-WinEvent | Get-WmiObject | Get-WSManInstance | Invoke-Command | Invoke-WmiMethod |
| Invoke-WSManAction | Limit-EventLog | New-EventLog | New-PSSession | New-WSManInstance |
| Receive-Job | Register-WmiEvent | Remove-EventLog | Remove-PSSession | Remove-WmiObject |
| Remove-WSManInstance | Restart-Computer | Set-Service | Set-WmiInstance | Set-WSManInstance |
| Show-EventLog | Stop-Computer | Test-Connection | Test-WSMan | Write-EventLog |
これらのコマンドレットについては解説しませんので、興味がある方はGet-Helpコマンドレットで調べてみてください。
まとめ
PowerShellにおけるリモート処理は、最初の設定さえしてしまえば何も難しいものではありません。しかし、リモート処理用に構成することは、相手を操作する/相手から操作されることを意味しますので、運用する際は十分に気をつけてください。
今回の記事を参考に、業務に生かしていただければ幸いです。



