それでは、SMOを使用してデータベースの作成を行ってみることにしよう。まず、SQL Server Management Studioから「データベース」を右クリックして「PowerShellの起動」をクリックする。すると「Databases」フォルダからPowerShellが起動するので、以下のコマンドを実行する。

$db = New-Object Microsoft.SqlServer.Management.SMO.Database
$db.Parent = Get-Item ..
$db.Name = "sample"
$db.Create()

スクリプトの内容を1行ずつ見ていこう。まずPowerShellのコマンドレットである「New-Object」でSMOのDatabaseのインスタンスを生成する。それから、そのインスタンスのParentとして現在位置(すなわちDatabasesフォルダ)を設定し、データベース名を「sample」にして、データベースの作成を実行する、という手順になっている。

これらの一連のコマンドを実行後に、SQL Server Management Studioでデータベース一覧を確認してみよう(おそらくデータベースを右クリックし、「最新の情報に更新」をクリックする必要があるだろう)。するとsampleという名前のデータベースが確かに作成されていることが確認できる。

スクリプトの実行により「sample 」というデータベースが生成されている

もちろんデータベースだけではなく、テーブルや列もすべてファイルシステムのように扱うことができる。ここでは、以下のような構造のEmployeeテーブルに対し、PowerShellからどのように操作できるかを見ていこう。

サンプルテーブルのEmployee

SQL Server Management Studioを起動し、Employeeテーブルを右クリックしてPowerShellを起動した後、次のコマンドを実行してみよう。

dir .\Columns

すると、以下のような結果が表示される。つまり、「テーブルに含まれる列」という情報も、ファイルシステムのように扱うことができているということだ。

「dir .\Columns」を実行したときの様子。ファイルシステムと同じような感覚でデーブルを操作できる

さて、今まではSQL Server Management StudioからのPowerShellを起動してきたが、もちろんPowerShellを直接起動して、SQL Serverを操作することも可能だ。ただし、PowerShellを起動しただけではSQL Serverを操作するために必要なスナップイン(拡張機能)が読み込まれていないので、PowerShellを起動後に次のコマンドを実行する必要がある。

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100

あとは今まで同じように「cd」や「dir」といったコマンドを使用して、SQL Serverを操作することが可能だ。たとえば、sampleデータベースのEmployeeテーブルに移動するには、次のようなコマンドを実行すればよい。

cd SQLSERVER:\SQL\WIN-KGNGSGG6CQN\DEFAULT\Databases\sample\Tables\dbo.Employee

PowerShellでは、スクリプトをファイルとして保存して繰り返し再利用できるので、SQL Serverに対する操作も1ファイルにまとめてしまうことが可能だ。たとえば、以下のスクリプトを「sample1.ps1」という名前で保存し、コマンドプロンプトから「powershell .\sample.ps1」というようにコマンドを実行してみよう。

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100
cd SQLSERVER:\SQL\WIN-KGNGSGG6CQN\DEFAULT\Databases\sample\Tables\dbo.Employee
dir

そうすれば、コマンドプロンプトからPowerShellを使用し、SQL Serverにアクセスできていることが確認できる。

上記のサンプルスクリプト「sample1.ps1」を実行したときの画面

また、拡張子が「ps1」のファイルは、エクスプローラーの右クリックメニューから「PowerShellで実行」をクリックして実行することもできる。

SQL Server 管理オブジェクト (SMO) クラス ライブラリ「Microsoft.SqlServer.Management.Smo Namespace」
http://technet.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.aspx

このWebページに掲載されている一覧表を見れば、データベースやテーブル、インデックスなど、大抵のオブジェクトに対応するクラスが用意されていることが分かる。

PowerShellのWebcastが公開

マイクロソフトが運営するシステム管理者向けWebサイト「Microsoft TechNet」には、Webcast形式で技術を解説する「TechNet Edge」というWebサイトも用意されている。

先日、そこにPowerShellによるシステム管理について解説する動画が公開されたので、ご紹介しておこう。

公開された動画は以下の8本。

TF セミナー「(01/08) PowerShell によるサーバー管理」 - Server Core の環境設定
http://edge.technet.com/Media/TF-PowerShell-01/

TF セミナー「(02/08) PowerShell によるサーバー管理」 - Server Core の環境設定
http://edge.technet.com/Media/TF-0208-PowerShell--Server-Core-/

TF セミナー「(03/08) PowerShell によるサーバー管理」 - Server Core の環境設定
http://edge.technet.com/Media/TF-0308-PowerShell--Server-Core-/

TF セミナー「(04/08) PowerShell によるサーバー管理」 - Hyper-V の管理
http://edge.technet.com/Media/TF-0408-PowerShell-Hyper-V-/

TF セミナー「(05/08) PowerShell によるサーバー管理」 - Active Directory の管理
http://edge.technet.com/Media/TF-0508-PowerShell--Active-Directory-/

TF セミナー「(06/08) PowerShell によるサーバー管理」 - Demo-Active Directory の管理
http://edge.technet.com/Media/TF-0608-PowerShell--Demo-Active-Directory-/

TF セミナー「(07/08) PowerShell によるサーバー管理」 - ADゴミ箱
http://edge.technet.com/Media/TF-0708-PowerShell--AD/

TF セミナー「(08/08) PowerShell によるサーバー管理」 - AD属性変更の追跡
http://edge.technet.com/Media/TF-0808-PowerShell--AD/

いずれも、PowerShellの基本や便利な使い方について日本語で詳しく解説しているので、時間のあるときにご覧になるとよいだろう。