Windows PowerShell Cmdlet tk-engineering.com Copyright© 2006 tk-engineering.com All rights reserved. おさらい Windows PowerShellとは… かつて”MONAD”と呼ばれていたものです。 .NET ベースの新しいスクリプト言語です • 従来のVBScriptからさらに進化して、COMベースではな く、.NETベースで動くようになります。 • .NETベースで動くので、.NETで作られたものとの親和性 が高くなります。(型とか…) • とにかく、いろいろと便利になります。 Copyright© 2006 tk-engineering.com All rights reserved. 今回のお題「コマンドレット」 コマンドレット とは何か • ユーザ独自のシェル拡張です VBScriptではどうしていたものか • 独自でExeを作って呼び出したり… • COM DLL を CreateObjectで呼んだり… そうしていたものを、もっと強力にして… Copyright© 2006 tk-engineering.com All rights reserved. 今回のお題「コマンドレット」-2 コマンドレットは、シェルの一部として動きます • 普通にPowerShellから呼び出せます 例: C:\MSH\> Say-Hello (Say-Hello がコマンドレット) コマンドレットは、.NETで作成されます • C#やVB.NETで作成= VSから作成・デバック可能 Copyright© 2006 tk-engineering.com All rights reserved. コマンドレットの作り方-1 まず、新しいShellを作る • イロイロなファイルが作成されるので、新しいフォ ルダを作ることをオススメ。 • 手順は以下の通り >set-location [作りたいパス] >make-shell –out [新しいシェルの名前] –ns [シェルの名前空間名] (中略) Shell [新しいシェルの名前] is created successfully. [新しいシェル].cs というファイルが出来るので、 覗いて見るのも一興。 Copyright© 2006 tk-engineering.com All rights reserved. コマンドレットの作り方-2 先ほど作ったシェルを起動してみます > ./[新しいシェル].exe Error loading the extended type data file: Cannot find the registry key: “SOFTWARE\Microsoft\MSH\[名 前空間名].newshell\Path”,… (後略) やはり、世の中イロイロと難しいようです。 一旦exitで元のShellに戻って、設定を追加します。 • 注意:表示されるレジストリは環境によって変わります。 Copyright© 2006 tk-engineering.com All rights reserved. コマンドレットの作り方-3 新しいシェルに対して各種設定を追加します。 >$Path = “HKLM:\SOFTWARE\Microsoft\MSH\1\ShellIds\[名前空間名].[シェルの名前] >new-item –type directory $path Hive:Registory::HKEY-LOCAL-MACHINE\...(略) >new-property –path $path –property path –value [新しいシェルのフルパス] MshPath : Registory::HKEY-LOCAL-MACHINE\...(略) >./[新しいシェル].exe ここまでは「下準備」だったりします。 Copyright© 2006 tk-engineering.com All rights reserved. コマンドレットの作り方-4 実際にコマンドレットとなるものを作ります MDCのデモでは、notepadでコードを書いて csc.exe に流し込んでいましたが、それはしません。 素直に VS2005を使用します。 C#-クラスライブラリとして作成します。 System.Management.Automation に対して、参照を追加します。 • MONADのインストールフォルダにあります。 using System.Management.Automation; Copyright© 2006 tk-engineering.com All rights reserved. コマンドレットの作り方-5 実際のクラス定義は… • クラスは”Cmdlet”を継承します • カスタム属性でコマンド名を定義します [Cmdlet("Say","Hello")] public class MonadTestC1 : Cmdlet { • ここでは、”say-hello”というコマンドレットを 作成します。 おさらい:こんな訳で必ず「動詞-名詞」の形になります。 Copyright© 2006 tk-engineering.com All rights reserved. コマンドレットの作り方-6 パラメータが必要な場合には… • プロパティにカスタム属性を付加します。 [Parameter(Mandatory=true,Position=0)] public string Name { get { return mstrName; } set { mstrName = value; } } カスタム属性の説明 • Mandatory:true=必須パラメータ • Position:順番(0から) • VB.NETでも同じようにして作成できます。 Copyright© 2006 tk-engineering.com All rights reserved. コマンドレットの作り方-7 実際の動作を記述します • ProcessRecord を override しているのが ポイントです。 protected override void ProcessRecord() { WriteObject("Hello " + mstrName); } 返値の返却に”WriteObject”を使用するのも、 要注意です。(そもそもvoidだし) • これにより、MONAD側でのパイプライン使用が可能です。 Copyright© 2006 tk-engineering.com All rights reserved. コマンドレットの作り方-8 出来上がったDLLをshellに登録します。 make-shell -out [新しいシェルの名前] -ns [名前空間名] -reference [コマンドレットのDLL] 以上で「コマンドレット」が使えるようになります。 Copyright© 2006 tk-engineering.com All rights reserved. まとめ コマンドレットは .NETで作成されます。 コマンドレットの登録には新しいシェルを作成 する必要があります。 • つまり、必要なコマンドレットを集めた 「オレオレツールボックス」が出来上がります。 Copyright© 2006 tk-engineering.com All rights reserved. リンク Microsoft TechNet (US) http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx Channel 9 http://channel9.msdn.com/ Copyright© 2006 tk-engineering.com All rights reserved.
© Copyright 2024 ExpyDoc