PowerShell: Visual Studio 2005 テンプレート
2006年も間もなく終わりです。お世話になった皆様ありがとうございました。今年やり残したことは山のようにありますが、何か一つだけ年が明ける前にやっておこうと考え、このエントリーを書いています。トピックはいたって日常的ですが。。
自分の活動を振り返って、PowerShellについては、今年は存在を知っていただいて、強力な運用管理ツールとして認識してもらおうというところまででした。来年はサーバーアプリケーションを開発している方にも、そのアプリケーションを管理するコマンドレットを開発していただいて、PowerShellで運用管理ができるようなアプリケーションが増えるといいなと思っています。そのための情報も集めていきたいと思っています。
さてここでご紹介するのは、Visual Studio 2005でPowerShellのスナップインやコマンドレットを開発する際に便利なテンプレートです。以下のページからダウンロードできます。
Windows PowerShell Visual Studio 2005 Templates (C# and VB.NET)
http://channel9.msdn.com/ShowPost.aspx?PostID=256835
これは、マイクロソフトの公式なプロダクトではなく、David Aikenという方が個人で作られたものです。Davidさんは、マイクロソフト本社のDSIエバンジェリストだそうです。(DSIとはDynamic Systems Initiativeの略で、マイクロソフトが目指す、自律的かつ動的なシステムのロードマップです。)
さて、ダウンロードして解凍すると、VSI形式のインストーラが2つ、C#用とVB.NET用のものが入っています。ここではC#用のテンプレートをインストールします。

3つのテンプレートがインストールされます。
- Windows PowerShell プロジェクトテンプレート
- コマンドレット(Cmdlet)テンプレート
- コマンドレット(PSCmdlet)テンプレート
コマンドレットを作るには、Cmdletクラスを継承する方法とPSCmdletクラスを継承する方法があります。前者はPowerShellの実行環境に依存しません。後者はPowerShellの実行環境内のみで実行できます。詳しくはWindows SDKのヘルプファイル、または以下のページを参照してください。
Creating Windows PowerShell Cmdlets
http://msdn2.microsoft.com/en-us/library/ms714598.aspx
ではさっそくプロジェクトを作ってみます。

スクリーンショットはVisual C# 2005 Express Editionのものです。Windows PowerShellテンプレートを選択してプロジェクト作成すると、PowerShellのスナップインを作成するために必要なコードと参照などの設定がされています。スナップインの説明のプロパティ文字列を確認しておきます。

次に、コマンドレット本体を作ります。プロジェクトに新しい項目を追加します。
ここではWindows PowerShell Cmdletを作ることにし、ファイル名を指定します。コマンドレットの命名ルールは [動詞]-[名詞] の形式です。ファイル名にコマンドレット名の名詞を指定しておくと、テンプレートが自動的にコードに埋め込んでくれるので便利です。
この例では、Get-TimeToNewYearという、2006年の残り時間を表示するコマンドレットを作っています。
Parametersリージョンには、パラメータの設定例が書いてありコメントアウトされているので、パラメータの設定に便利です。コマンドレット処理の本体は、ProcessRecord()メソッド内に書きます。出力はWriteObject()メソッドを使います。
コマンドレットが書けたら、プロジェクトをビルドします。DLLファイル、ここではTimeToNewYear.dllができます。これがPowerShellのスナップインです。ここから先の作業はPowerShellで行います。
まずスナップインを登録します。オレンジ部分が登録コマンドです。簡単のため、DLLファイルを c:\psh にコピーしてあります。
PS C:\psh> C:\windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe C:\psh\TimeToNewYear.dll
Microsoft(R) .NET Framework Installation utility Version 2.0.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
トランザクションのインストールを実行中です。
...(中略)...
コミット段階が正常に終了しました。
トランザクション インストールが完了しました。
登録済みのスナップインを確認します。
PS C:\psh> Get-PSSnapin -registered
Name : TimeToNewYear
PSVersion : 1.0
Description : Registers the CmdLets and Providers in this assembly
スナップインを追加して、コマンドレットを実行してみます。
間に合いました。ではよいお年を!