管理スクリプトのサンプル

最後に、PowerShellとSQL Serverを組み合わせた少し実践的なサンプルを見てみよう。

会員制のWebサイトなどで、日々の会員数の推移をメールでレポートとして受け取りたい、というケースはしばしばあるだろう。そこで「特定のテーブルのレコード件数をメールで通知する」という処理をPowerShellで実行してみることにする。「特定のテーブルのレコード件数をメールで通知する」という処理をスクリプトで行えるようにしておけば、後はそれをジョブなどで定期的に実行すればよい。

ここでは先ほど利用したEmployeeテーブルの行数をメールで送信するというスクリプトを作成してみることにする。スクリプトとして実行できるためにはSQL Server Management Studioから起動しなくてもSQL Serverにアクセスできなくてはならないので、まず必要なスナップインを読み込む処理を記述する。スクリプトは以下のようになる。

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100

次に、SQL Serverのデータベースに移動し、そこからEmployeeテーブルの行数を取得する。SQL Server用のスナップインを使用すれば、SQL文を一切使わずに必要な処理が記述できる。スクリプトは以下のようになる。

cd SQLSERVER:\SQL\WIN-KGNGSGG6CQN\DEFAULT
$table = Get-Item .\Databases\sample\Tables\dbo.Employee
$rowCount = table.RowCount

最後に、取得した件数をメールで送信する。PowerShellは基盤として.NET Frameworkを使用しているので、System.Net.Mail.SmtpClientクラスを使用すれば、メール送信処理もたったの2行で記述できる(ここではメールサーバーのIPアドレスを「192.168.1.1」、通知元のメールアドレスを「notify@craft-works.jp」、通知先のメールアドレス「uru@craft-works.jp」としているので、必要に応じて変更していただきたい)。

$smtp = new-object System.Net.Mail.SmtpClient("192.168.1.1")
$smtp.Send("notify@craft-works.jp","uru@craft-works.jp","通知サンプル","Employeeテーブルのレコードは"+$rowCount+"件です。")

以上でスクリプトの作成は完了だ。スクリプトを「test1.ps1」という名前のファイルで保存し、右クリックメニューから「PowerShellで実行」をクリックしてみよう。すると、Employeeテーブルのレコード件数が正しくメールで通知されていることが確認できる。

上記のサンプルスクリプトで送信されたメール。こんな処理もPowerShellを使えば10行足らずでできてしまう

*  *  *

以上、PowerShellを使用したSQL Serverの管理について見てきた。

今回、実際に試してみて、専用のスナップインを使用することで、SQL Serverに対してファイルシステムのように簡単にアクセスしたり、あるいはSMOから細かい操作を行ったりでき、これまとは違った操作性を提供していることがわかった。また、PowerShell自体が.NET Frameworkを基盤としているため、.NET Frameworkのクラスライブラリを容易に組み合わせられるようだ。

今までもosqlなどからデータベースを管理できたが、上記のような機能を備えたPowerShellを使うことで管理対象がデータベースであることをあまり意識することなく作業が行える。これは、システム管理者にとって大きな魅力の1つとなるだろう。

また、本稿では触れられなかったが、PowerShellを習得すると、IIS(Internet Information Services)やActive Directory、Exchange Serverなども同じ操作性で管理できるようになる。そうした点を考慮すると、情報システムの管理効率化を図るうえで、PowerShellは非常に力強い味方になるはずだ。

PowerShellの公式情報はこちら!

Microsoftの管理者向け技術情報サイト「TechNet」にはPowerShell関連の情報が数多く掲載されている。

記事中でも紹介したが、門をたたくときに最初にアクセスすべきは、以下のページ。

Windows PowerShell でのスクリプティング
http://technet.microsoft.com/ja-jp/scriptcenter/powershell.aspx

また、周辺ツールや、実際に利用できるサンプルプログラムを入手したいならこちらのページが便利だ。

スクリプト センター
http://technet.microsoft.com/ja-jp/scriptcenter/default.aspx

PowerShellが使いこなせればこれまで以上の効率化が図れることは間違いない。ぜひこれらも参考に使いこなせるようになってほしい。