連載
» 2010年04月15日 00時00分 公開

PowerShell的システム管理入門:第2回 PowerShellの基礎 (3/3)

[牟田口大介(Microsoft MVP for Data Center Management - PowerShell),著]
前のページへ 1|2|3       

 最後に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ではバックグラウンド・ジョブの開始や動作状況の確認、結果の取得などの機能が追加された。
  (1)Start-Jobコマンドレットを使ってバックグラウンド・ジョブを起動する。
  (2)バックグラウンド・ジョブが作成された。
  (3)Get-Jobコマンドレットを使うとジョブの稼働状況が分かる。先ほど実行したId=1のジョブはState=Runningで実行中であることが分かる。
  (4)しばらくしてからもう一度Get-Jobコマンドレットを実行すると、Id=1のジョブはState=Completeとなっており、実行が完了したことが分かる。
  (5)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からの新機能。リモートのサーバ上でコマンドを実行できる。
  (1)New-PSSessionコマンドレットでセッションを作成する。
  (2)Enter-PSSessionコマンドレットで作成したセッションに入る。
  (3)するとプロンプトが「[リモート・サーバー名]: PS >」のように変化し、リモート・サーバのコンソールを扱える。ここではGet-Processコマンドレットをリモートで実行している。
  (4)exitと入力することでリモート・セッションから抜けることができる。

 以前の記事でPowerShell 2.0のほかの新機能も紹介しているので興味がある方は参考にしていただきたい。


 今回はPowerShellの文法を中心に基礎知識を解説した。今回取り上げなかったPowerShellの文法や機能については、今後必要に応じて解説する予定である。

 次回からはいよいよPowerShellを用いたシステム管理の具体的手法について述べる。次回はファイルおよびレジストリ操作の方法について解説する。


「[運用] PowerShell的システム管理入門 ―― PowerShell 2.0で始める、これからのWindowsシステム管理術 ―― 」のインデックス

[運用] PowerShell的システム管理入門 ―― PowerShell 2.0で始める、これからのWindowsシステム管理術 ―― 

前のページへ 1|2|3       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。