by manamana
27. March 2013 14:30
先日 Excel PowerShell Tool を使って Hyper-V を管理してみましたが、
同様の仕組みを VMware に移植してしてみました。
VMware のハイパーバイザーは有料だと思い込んでいたのですが、
VMware vSphere Hypervisor(ESXi) は無料で利用できると知りました。
このような美味しいシステムを知らずにいたとはお恥ずかしい…
PowerShell 用のコマンド群 VMware vSphere PowerCLI も用意されています。
これはもう PS Tool で利用するしか! と思ったのですが、結構大きな問題が出ました。
VSTO のアプリケーションドメインは、アセンブリのシャドウコピーを利用する設定になっています。
この状態で Runspace を作り、Add-PSSnapin "VMware.VimAutomation.Core" を実行すると、
VMware 関連の DLL もシャドウコピーが作られてしまい、スナップインが機能しません。
SharePoint 用のスナップイン等、GAC に登録されているアセンブリにはシャドウコピーが発動しないのですが、
VMware のコマンドレットには厳密名が付与されていないので GAC には登録出来ません。
さて困った…
シャドウコピーしなくても殆ど問題は無いはず(それどころかシャドウコピーで障害が発生する)なので、
シャドウコピーを作らない PS Tool を(無理やり)作ったところ、ちゃんと動いてくれました。
VMware vSphere PowerCLI は GAC に登録するべき製品だと思うのですが、とりあえず良しとしましょう。
このバージョンの PS Tool はVSTOの設定を無効にしているので副作用が予想されます。
暫くテストをした後に公開しようと思っていますが、そんなの全然大丈夫な方はご連絡ください。
無料とはいえ ESXi は高機能です。
Hyper-V の気楽さはありませんが、本格的な運用には痒い所に手が届く感じでしょうか?
この際だからもっと強力な運用スクリプトを書いてみようかな~
9f233610-eaab-4c12-b802-1cc7efe4ee1a|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Hyper-V | PowerShell | VSTO
by manamana
11. March 2013 15:00
SharePoint 2010 は .Net Framework 4.0 ではサポートされないわけですがうまく回避出来ません。
Excel PowerShell Tool は Visual Studio 2012 の VSTO で作成していますが、
このバージョンでは Framewwok 4.0 以降しか選択出来ません。
そこで作成された dll から Runspace (≒PowerShell) を作ると、CLR 4.0 が選ばれてしまうのです...
← CLRVersion に注目!
dll.config の設定や、アウトプロセスで PowerShell を呼び出す等の技を試してみましたが、うまく行きません。
うまく行ったとしても、Framework 4.0 に加え WMF3.0 も必須になるので本末転倒です。
(※アウトプロセス起動はWMF3.0からの機能)
いろいろ考えたのですが、PS Tool を PowerShell 2.0 と 3.0 用で分けるのが良いと判断しています。
そのためには Visual Studio 2010 に再登場願わなければ…
PowerShell 3.0 は、Framework 4 + WMF3.0 が必須なのでWin7/Server 2008R2 では追加インストールとなりますが、
Win8/Server 2012 の時代だし問題ないでしょう。
それより、WMF3.0 を入れた環境で、あえて PowerShell 2.0 を使う…といった場合に問題が出そうです。
PowerShell のバージョンを選択できるメニューを追加するなりで対処できるつもりですが、そんなに需要はないでしょうww
それよりも PS Tool にコンソール機能をつけるとかをやりたいです。
追記:
ちょっと考えてみれば、PS Tool を SharePoint 2010 の環境で動かす必要は全くないですね。
Invoke-Command をリモートから投げてやればOKじゃないです...orz
SharePoint PC に開発環境を入れるのが当たり前になっていたので基本を忘れていました。
Invoke-Command の戻り値は多少癖がありますが、PowerShell のバージョン毎に PS Tool を作るより全然楽です。
22ebfbe3-0a95-4d74-b497-8ba1b6b8d28e|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
PowerShell | VSTO
by manamana
16. January 2013 22:15
昨年来いろいろやっていたツールがとりあえず完成したので公開してみます。
http://manamana.ddo.jp/blog/page/pstool.aspx
名前は Excel PowerShel Tool … 何のひねりもありません。
Excel から PowerShell を呼ぶための VSTO で作ったアドインです。
Excel と PowerShell の相性はとても良くて、結構便利です。
スクリプトを用意すれば、Excel がそのまま管理用 I/F になります。
PowerShell ユーザーはきっと喜んでくれる!…と思います。
※01/21 説明で使用している "new-user.ps1" のソースを追加しました。参考にして下さい
5d6505d1-74fd-4c09-a67a-4417ca7a0989|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
PowerShell | VSTO
by manamana
11. January 2013 18:00
VSTOプロジェクトではまってしまいました...orz
そんな時は環境変数 VSTO_SUPPRESSDISPLAYALERTS を 0 に設定するのが便利です。
普段は無視される内部エラー(その多くは初期化処理)が MessageBox として現れます。
…VSTO というより単純な参照の問題でした。
OSが変わるといろいろ設定が面倒です。特に .Net Framework のメジャー番号が変わると
内部システムにいろいろな変更点が生じて、そのしわ寄せが末端プログラマーに…まぁ、いつもの事ですねww
623865c2-46c8-47f0-be8b-8d30b88bbe56|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
VSTO
by manamana
30. September 2010 10:28
ListObject の連動は、ComboBox/ListBox でも可能です。
ComboBxo/ListBox を使用するときに特に重要なのは ListFillRange プロパティです。
この ListFillRange に「名前付き範囲」(=Named Range) を利用する事により、
ListObject と ComboBox/ListBox とを連動させる事ができるのです。
Named Range を ListObject の要素と一致するように設定します。
Excel 2003 では、特に変わった様子はありません。
Excel 2007 では、ListObject の名前が設定画面に反映されています。
ListObject の名前は Excel 2003 では直接変更できませんが、
Excel 2007 では、「名前の設定」や「テーブルツール」にて編集が可能になっています。
このようにすると、ListObject の変更に従い、ComoBox/ListBox が変化します。
この連動機能ですが、ちょっと癖があってうまく動かない場面があります。
これを解決するには、ListFillRange を同じ値で再設定すると良いです。
私は ListObject を、名前付き範囲が強化されたものと捉えていますが、
Excel のバージョンによって扱いが微妙に異なるので、使いにくい部分もあります。
どうせなら、ListFillRange や グラフデータといった、あらゆる範囲指定箇所に
Named Range と ListObject を指定できるようになると嬉しいのですが・・・MS さん、お願いします。
55f3190e-2ef9-4685-a5b6-8e2606ad282d|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
VSTO