PowerShellによるWebサーバー管理

面白かったら拍手をクリック
漆尾
3

Windows Server 2008 R2からは、Windows PowerShellによるIISの管理機能もアドオンなしで使用可能だ。PowerShellとは、Windows Server 2008やWindows 7からは標準搭載されている、新しいコマンド ラインシェルのことである。従来の「コマンドプロンプト」と異なり、さまざまな処理が簡単に記述可能になっている。また、.NET Framework上に構築されており、.NET Frameworkのクラスライブラリも利用できるため、メールの送信やデータベースへのアクセスといった処理を記述することもできる。

たとえば複数のファイルが存在するフォルダにおいて、「最終アクセス日時が2009/12/1より前のファイルをすべて削除する」という処理であれば、次のように記述できる。

dir . | where { $_.LastAccessTime -lt "2009-12-01"} | rm

ここではPowerShellそのものの詳細については説明できないが、「dir」コマンドや「rm」コマンドを使っていることからも、従来のコマンドプロンプトの拡張として使用できることがイメージできるのではないだろうか。

それでは、Windows Server 2008 R2から標準搭載されている、IISそのものの管理を行うためのモジュールを使ってみよう。

「Set-ExecutionPolicy RemoteSigned」というコマンドを実行してPowerShellの実行ポリシーを変更すれば、WebAdministrationモジュールをインポートできるようになる。WebAdministrationモジュールに含まれるコマンドレットを使用すれば、簡単にIISの設定を取得したり変更したりできるのだ。Webサイトの一覧を取得できる「Get-Website」やWebサイトの再起動を行う「Restart-WebItem」、あるいはweb.configを変更する「Set-WebConfigurationProperty」などのコマンドレットが用意されている。

たとえば、「Default Web Site」を再起動する場合は次のようなコマンドを実行する。

Restart-WebItem "IIS:\sites\Default Web Site"

あるいは、「Default Web Site」のweb.configを書き換えて、customErrors要素の値を変更するのであれば、次のようなコマンドを実行する。

Set-WebConfigurationProperty /system.web/customErrors -name mode -PSPath "IIS:\Sites\Default Web Site" -value RemoteOnly

もちろん、PowerShellが持つ他の機能と組み合わせて使用することもできる。たとえば、現在の状態が「開始」になっているWebサイト一覧を取得する場合は、次のようなコマンドを実行すればよい。

Get-Website | where {$_.State -eq "Started"}

このように、PowerShellを使用することで、従来ではGUIを通して行うしかなかったような処理でも、簡単にスクリプトで記述できるようになるのだ。

また、IIS管理用のモジュールを使用しなくても、Webサーバーの管理において発生するさまざまな処理を、PowerShellを使うことで簡単に自動化できる。

たとえばFTPサイトを運用しているのであれば、ディスク容量の管理が必要になる。そこで「ftprootフォルダの合計サイズが10MBを超えていれば、管理者にメールで通知する」というような処理を行うのであれば、PowerShellのスクリプトで次のように記述できる。

$total = ls C:\inetpub\ftproot -r | Measure-Object -property length -sum
if($total.sub -gt 10000000){
  $mailer = new-object System.Net.Mail.SmtpClient("localhost")
  $mailer.Send("from@example.com","to@example.com","要領超過","ftprootフォルダの合計サイズが10MBを超えました。")
}
面白かったら拍手をクリック
漆尾
3

後はこのスクリプトをファイルとして保存し、定期的に実行するようにしておくだけでよい。.NET Frameworkを使用したことのある人であればお気づきかもしれないが、このスクリプトでは.NET FrameworkクラスライブラリのSmtpClientクラスを使用している。このようにPowerShellでは変数や制御構文はもちろん、.NET Frameworkクラスライブラリも利用できるので、サーバー管理業務において発生するタスクを、容易に自動化できるのである。

*  *  *

今回は、Windows Server 2008 R2のインストールからIISの設定、PowerShellによる管理までを説明した。次回は、実際に.NETアプリケーションを動作させたり、IIS 7.5から.NETアプリケーションも実行可能なServer Coreでの動作を試したりするので、こちらもぜひご期待いただきたい。