■ コマンドレットの作成
環境設定
http://www.microsoft.com/ja-jp/download/details.aspx?id=30950で、Windows SDKをダウンロードして、インストールする注意
インストールする際には、拡張子を「.iso」(6.2.6000.0.18.WindowsSDK_Vista_JPN_daily.DVD.Rel.iso)にして 例えば「DAEMON Tools Lite(以下のURL参照)」などのISOをマウントするソフトを使って、インストールするhttp://blogs.yahoo.co.jp/dk521123/16726927.html
準備
【1】VS上で、以下のDLLを参照設定する 追加するdll | 参照先 ---------------------------------+------------------------------------------------------------------------ System.Management.Automation.dll | C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 System.Configuration.Install.dll | System.Configuration.Install.dll([参照の追加]-[.NET]タブで追加する) 【2】.NET Frameworkを「3.0」にする。手順は以下の通り。 ■手順 1) ソリューションエクスプローラで、プロジェクト名を右クリックし、[プロパティ]を選択 2) [アプリケーション]タブで対象のフレームワークを「.NET Framework3.0」にする ちなみに、以下を参考にした。【2】を行っていないと、下記の「System.BadImageFormatException」の例外が発生してしまう。http://d.hatena.ne.jp/tmitu/20100909/1284033291
注意
http://msdn.microsoft.com/ja-jp/events/dd297528.aspxによると、Windows PowerShell コマンドレット作成用のアドインがあって、ダウンロードすれば 使えるらしい。
プログラム作成
以下にサンプルプログラムを記す。
SampleShellSnapIn.cs
using System.ComponentModel; using System.Management.Automation; namespace SamplePowerShellCmdlet { [RunInstaller(true)] public class SampleShellSnapIn : PSSnapIn { public override string Name { get { return "SampleShellSnapIn"; // ★注意★ここが、インストールの手順4)の「スナップイン名称」になる } } public override string Vendor { get { return "SampleCompany"; } } public override string VendorResource { get { return "SampleShell, SampleCompany"; } } public override string Description { get { return "Description"; } } public override string DescriptionResource { get { return "DescriptionResource"; } } } }
GetProccess.cs
using System; using System.Management.Automation; namespace SamplePowerShellCmdlet { [Cmdlet(VerbsCommon.Get, "GetProccess", SupportsShouldProcess = true)] public class GetProccess : PSCmdlet { #region Parameters /* [Parameter(Position = 0, Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "Help Text")] [ValidateNotNullOrEmpty] public string Name { } */ #endregion protected override void ProcessRecord() { try { this.WriteObject( System.Diagnostics.Process.GetProcesses(), true); } catch (Exception) { } } } }
インストール
* 作成したクラスライブラリは、インストーラ ツール (Installutil.exe)を使って、インストールする
手順
1) 上記のプログラムをビルドして、DLLを作成する(今回は「SamplePowerShellCmdlet.dll」とする) 2) 「C:\Windows\System32\WindowsPowerShell\v1.0」にフォルダ(例えば「SnapIn」)を作成しておき、 1)で作成したDLLを格納しておく 3) PowerShellを起動し、以下のようなコマンドを入力し、インストールする &"$env:windir/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe" ($PSHome + "\SnapIn\SamplePowerShellCmdlet.dll"); 【別方法】(こっちの方がいい) 3-1) [スタート]-[すべてのプログラム]-[Microsoft Windows SDK]-[CMDシェル]を選択 3-2) DLLがあるところまで移動する(cd C:\Windows\System32\WindowsPowerShell\v1.0\SnapIn) 3-3) 「installutil "対象のDLL名"」を入力する(今回の場合「installutil SamplePowerShellCmdlet.dll」) 【参考:アンインストール】 アンインストールは、「InstallUtil /u "アンインストールするファイルのパス"」を入力する 詳細は、以下を参照のこと。http://codezine.jp/article/detail/3191?p=3
4) (必須の手順ではないが)インストールが成功したかどうかを確認するには、 PowerShellコンソール上で「Get-PSSnapin -Registered」を入力する ⇒プログラム作成(上記の例だと「SampleShellSnapIn.cs」)時に入力したNameやDiscriptionなどが 表示されているはず。 5) PowerShellコンソール上で「Add-PSSnapin "スナップイン名称"」を入力し、スナップインを登録する (上記の例だと「Add-PSSnapin SamplePowerShellCmdlet」)
実行
* PowerShellコンソール上で、作成したコマンドレットを入力する (上記の例だと「GetProcess」を入力する)
参考文献
http://msdn.microsoft.com/ja-jp/events/dd297528.aspxhttp://codezine.jp/article/detail/3191
http://codezine.jp/article/detail/3326
http://csharper.blog57.fc2.com/blog-entry-55.html
http://www.atmarkit.co.jp/fwin2k/operation/psh01/psh01_02.html