ラベル 拡張 の投稿を表示しています。 すべての投稿を表示
ラベル 拡張 の投稿を表示しています。 すべての投稿を表示

2010年2月24日水曜日

PowerShellからCOMのタイプライブラリを使う

一つ前の投稿で紹介したCodePlexのサイトに、
COMのタイプライブラリを使用するためのツールが公開されています。
CodePlex : Type Library Importer in Managed Code
この機能、前からずっと欲しいと思ってました。
私以外にも欲しいと思っていた人もいらっしゃると思いますし、
喜び半分でこのサイトでもリンクのみ公開しました。

WSHでは、タイプライブラリを容易に利用することができました
VBScriptはActiveX経由で簡単にCOMオブジェクトが作成できる上、
タイプライブラリも簡単に使うことができました。
「VBScriptはCOMのネイティブ言語」という旨の話が書かれていた
サイトがありましたが、そのとおりだと私も思います。

PowerShellでも、
New-Objectコマンドレットを用いてCOMオブジェクトを取得できます。
しかし、WSHと違いタイプライブラリを読み込む方法がなかったため、
プロパティに設定されている数字が何を表すかを調べるのが、
若干面倒な作業だったりします。
しかし、Type Library Importer in Managed Codeが使用できれば、
その苦労ともおさらばできることでしょう(喜)。

参照リンク
CodePlex : Type Library Importer in Managed Code

2010年2月1日月曜日

Windows Server 2008 R2から解禁されるPowerShellモジュール

technetをぷらっと見ていたら偶然見つけました。

Windows PowerShell の役割と機能のコマンドレットの新機能

Active Directoryとかグループポリシーオブジェクトとか
フェールオーバークラスタリングとかOSのバックアップとか、
便利そうなコマンドレットが盛りだくさんです。
環境構築で使いたいものも、日常の運用で使いたいものもあります。
Windows Server 2008 R2の仕事が入れば、
いろいろ遊べる実機が手に入る実際に使用できるのになぁ。

2008 R2でパワーアップしたActive Directoryでは、
PowerShellからのみ使用可能な機能がいろいろとあるようです。
詳細は、MS安納様がTechED2009にて解説されていましたが、
ご自身のブログでも関連情報を数多く公開していらっしゃいます。

そういえば、環境構築の仕事において、
グループポリシーの設定で悩んでいる同僚がいました。
ひとつひとつ手で設定していた、わけではないと思いますが、
VBScript等を用いた自動化に至らなかったのでしょう、たぶん。
グループポリシーの設定の自動化はPowerShellから可能になった、
ということであれば、
ここをしっかり目に勉強しておくと後々いいことがあるかも。。。

2010年1月28日木曜日

PowerShellから.NETのアセンブリを呼ぶ

PowerShellを使っていると、
.NETのアセンブリを使いたくなる場面に頻繁に遭遇します。
PowerShellは.NET Framework上で動作するシェル言語ということで、
簡単にアクセスすることができます。

実行例:
.NETのアセンブリを使ってみる。

#System名前空間にあるメソッドには、[クラス名]::でアクセスできる
PS> $array = @("a","b","c")
PS> [String]::Join("|", $array)
#出力 → a|b|c

#System以外の名前空間にあるメソッドへは、[名前空間名.クラス名]::でアクセスできる。
PS> [System.IO.Path]::GetTempPath()
#出力 → TEMPフォルダのパス


#System以外の名前空間にあるメソッドへは、「System.」は省略可能。
#Systemがデフォルト、って事なんだろうか。。。
PS> [IO.Path]::GetTempPath()
#出力 → TEMPフォルダのパス

#System以外の名前空間にあるクラスのインスタンスを作る。
#メソッドの呼び出しと同様、「System.」は省略可能。
PS> $list = New-Object -TypeName "Collection.ArrayList"
PS> $list.GetType().Name
#出力 → ArrayList

#Systemの付かない名前空間にアクセスする場合、アセンブリを予めロードする必要がある。
PS> [Microsoft.VisualBasic.Constants]::vbTab
#エラーパイプライン →
[Microsoft.VisualBasic.Constants]が見つかりません。この型を含むアセンブリが読み込まれていることを確認してください。

PS> [Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic") | Out-Null
PS> [Microsoft.VisualBasic.Constants]::vbAbortRetryIgnore
#出力 → DefaultButton1, OkOnly, AbortRetryIgnore



参考コマンド:

参考リンク:

関連投稿:
PowerShellからWin32APIを使う

修正履歴:
2010/02/02:実装例のソースコードを若干修正。
2010/02/24:関連投稿のリンクを追加