最後にPowerShell 2.0と1.0との違いについても触れておく。PowerShell 2.0ではさまざまな機能が追加されたが、その中からバックグラウンド・ジョブ機能とリモート機能を取り上げて説明する。
PowerShell 2.0ではUNIXシェル・スクリプトなどと同様にバックグラウンド・ジョブを実行することができるようになった。これにより時間のかかる処理を実行する際、終了するまで待つのではなく、処理をバックグラウンドで実行させ、呼び出し元の次の処理をすぐに実行することができる。
Start-Job {Start-Sleep -second 20; Write-Host "20秒経ちました"}
のようにStart-Jobコマンドレットを用い、パラメータにスクリプトを指定すると、そのスクリプトがバックグラウンドで実行される。ここではStart-Sleepコマンドレットを使って20秒待った後、Write-Hostコマンドレットで時間が経過したことを表示するというスクリプトをバックグラウンドで実行している(「 ; 」は1行に複数の文を書くときの区切り記号)。このスクリプトを普通に実行すると20秒間コンソールに入力することができないし、スクリプトで実行した場合はスクリプトが20秒間停止する。しかしバックグラウンドで実行した場合はStart-Jobコマンドレット実行後、すぐにコンソールは使用可能になるし、スクリプトの場合は後続の行が実行される。バックグラウンド・ジョブの実行結果はReceive-Jobコマンドレットを使うと表示できる。
PowerShell 2.0ではリモート・サーバに接続して、PowerShellコマンドやスクリプトを実行することができるようになった。リモート機能を使用するにはリモート・サーバとクライアントの両方にPowerShell 2.0がインストールされており、同一のActiveDirectoryドメインに属している必要がある。また、リモート・サーバであらかじめEnable-PSRemotingコマンドレットを実行しておくことで、WinRMサービスを起動し、TCPの80番ポートでコマンド要求を受け入れるようにしておく必要がある。
クライアントからリモートでコマンドを実行するには、
Invoke-Command {リモートで実行するコマンド} -computerName リモート・コンピュータ名
とする。ログオンに認証が必要な場合はさらに-credential (Get-Credential)のようにパラメータを追加してアカウント情報を入力できる。さらに-asJobパラメータを指定するとコマンドがバックグラウンド・ジョブとして実行される。-computerNameパラメータでコンピュータ名を配列として指定すれば、複数のサーバで同時に同じコマンドを実行することもできる。
1つのリモート・サーバに複数回コマンドを実行する場合はNew-PSSessionコマンドレットを使い、固定接続セッションを作成するとよい。
$session = New-PSSession -computerName リモート・コンピュータ名
とすると$sessionにセッションが格納されるので(このとき-credentialパラメータも使用可能)、
Invoke-Command {リモートで実行するコマンド} -session $session
のようにInvoke-Commandコマンドレットで使用できる。
また、
Enter-PSSession $session
のようにして作成したセッションに対して、Enter-PSSessionコマンドレットを用いて接続すると、SSHのようにクライアントからリモート・サーバのコンソールを直接操作可能になる。
以前の記事でPowerShell 2.0のほかの新機能も紹介しているので興味がある方は参考にしていただきたい。
今回はPowerShellの文法を中心に基礎知識を解説した。今回取り上げなかったPowerShellの文法や機能については、今後必要に応じて解説する予定である。
次回からはいよいよPowerShellを用いたシステム管理の具体的手法について述べる。次回はファイルおよびレジストリ操作の方法について解説する。
「[運用] PowerShell的システム管理入門 ―― PowerShell 2.0で始める、これからのWindowsシステム管理術 ―― 」
Copyright© Digital Advantage Corp. All Rights Reserved.