特集:Windows PowerShellレビュー(後編)Windows PowerShellのパワーの源は.NETオブジェクトデジタルアドバンテージ 遠藤 孝信 |
![]() |
|
|
|
クラス・ライブラリの活用
ここまではCmdletにより生成されるオブジェクトについて操作を行ってきた。これに加えてPowerShellでは、.NET Frameworkのクラス・ライブラリで用意されているクラスからオブジェクトを作成し、それを利用することができる。最後にこれについて見ておこう。
■クラスのインスタンス化
オブジェクトを新しく作成するには「New-Objectコマンド」を使用する。パラメータにはインスタンス化したいクラスの名前を指定する。
以下の例では、WebページにアクセスするためのクラスであるWebClientクラス(System.Net名前空間)を使用して、@ITのトップページ(index.html)を取得し、それをファイル「atmarkit.html」に保存してから、画面に表示している。
|
|
| WebClientクラスを利用したWebページの取得 | |
| .NET FrameworkのクラスはNew-Objectコマンドによりインスタンス化できる。ここではWebClientクラスを使ってWebページの内容を取得している。 |
WebClientクラスのDownloadStringメソッドは、パラメータで指定したURLにアクセスし、その内容を文字列として返すメソッドだ。ここではその内容をファイルにリダイレクトしている。
■静的メソッド(スタティック・メソッド)の呼び出し
上記の例では、クラスをインスタンス化し(クラスからオブジェクトを作成し)、そのインスタンス・メソッドを呼び出した。メソッドにはもう1種類、静的メソッドと呼ばれるメソッドがある。これはインスタンスに関係なくクラスに対して直接呼び出すことのできるメソッドだ。
PowerShellではクラスの静的メソッドは次のような構文で呼び出すことができる。
[クラス名]::メソッド名()
以下の例ではStringクラスの静的メソッドであるFormatメソッドを呼び出している。
|
|
| Stringクラスの静的メソッドであるFormatメソッドの実行例 | |
| Formatメソッドでは第2パラメータのオブジェクトを書式付きで文字列にできる。「{0:x}」は第2パラメータの値を16進表示の文字列に変換することを示している。 |
大カッコ内で指定するクラス名は通常、クラス名に名前空間名を付けた完全修飾名である必要があるが、StringやDateTimeなど、よく利用されるいくつかの基本的なクラスについては名前空間名を省略できるようである。
■Windowsフォームの利用
では最後にクラス・ライブラリの応用として、Windowsフォームを使用してPowerShellからウィンドウを開いてみよう。
Windowsフォームを利用するにはFormクラス(System.Windows.Forms名前空間)を利用するが、PowerShellではこのクラスを含んでいるアセンブリ(System.Windows.Forms.dll内にあるSystem.Windows.Formsアセンブリ)がデフォルトでメモリにロードされていないため、まずはこれをロードする必要がある。
アセンブリをロードするにはいくつかの方法があるが、ここではAssemblyクラス(System.Reflection名前空間)の静的メソッドであるLoadWithPartialNameメソッドを利用して次のように行った(Assemblyクラスを含んだアセンブリはPowerShell自体も利用するため、PowerShell実行時にすでにロードされている)。
|
|
| AssemblyクラスのLoadWithPartialNameメソッドによるアセンブリのロード | |
| メモリにロードされていないアセンブリに含まれるクラスを利用する場合には、このようにして、まずそのアセンブリをロードする必要がある。 |
ちなみに、PowerShellに対してすでにロードされているアセンブリの一覧は次のようにして見ることができる。
|
|
| AppDomainクラスのGetAssembliesメソッドによるロード済みアセンブリの一覧 | |
| AppDomainクラスの静的メソッドであるCurrentDomainプロパティからはPowerShellが実行されているAppDomain(アプリケーション・ドメイン)を示すオブジェクトを取得できる。パイプで使用している「Format-Listコマンド」はオブジェクトの内容を詳細表示するためのもの。 |
さて、以下の例では、ButtonコントロールとLabelコントロールを配置したフォームを開いている。ボタンがクリックされると、ラベルにメッセージを表示する。ここでは詳細な解説は割愛するが、C#やVBでWindowsアプリケーションを作ったことがある人ならだいたい理解できるだろう。
|
|
| ボタンとラベルを配置したフォームの表示 | |
| 最後のRunメソッドを実行した時点でウィンドウが開く。 |
Buttonコントロールのadd_Clickメソッドのパラメータにはイベント・ハンドラ(EventHandlerオブジェクト)が必要となるが、PowerShellではここにスクリプト・ブロックを記述できる。スクリプト・ブロック自体も実際にはオブジェクトであり(「{} | Get-Member」を実行してほしい)、これがEventHandler型にキャスト可能となっている。
以下の画面は、上記のコマンドを実行してウィンドウを開き、[クリック!]ボタンを押してメッセージを表示したところだ。
![]() |
| PowerShellから開いたウィンドウ |
| この画面は[クリック!]ボタンを押してメッセージを表示したところ。 |
もちろん実際には、PowerShellのスクリプトでWindowsフォームを開いたり、そのようなコードを1行ずつコマンドラインで実行したりするようなことはしないと思うが、PowerShellがうまく.NET Frameworkのクラス・ライブラリを活用できるようになっていることはお分かりいただけただろう。
■
今回見てきたように、PowerShellでは実行結果がテキストではなくオブジェクトであり、また、そのオブジェクトを直接操作できる仕組みが備わっていることにより、非常に強力で多種多様なオペレーションが可能になっている。さらには.NET Frameworkのクラス・ライブラリなどで用意された豊富なクラスをコマンドのように利用することもでき、その利用範囲はこれまでのシェルとは比べものにならないほど広い。
PowerShellをメインに利用するであろうシステム管理者は少し.NETのクラス・ライブラリについて学ぶ必要があるかもしれないが、.NET開発者にとっては若干の構文を学ぶだけで“マネージド”なスクリプトが使えるようになる。PowerShellがWindows標準搭載のシェルとなる日が待ち遠しいものである。![]()
| INDEX | ||
| [特集]Windows PowerShellレビュー | ||
| [前編]次世代Windowsシェル「Windows PowerShell」を試す | ||
| 1.エイリアスが基本となるオペレーション | ||
| 2.プロバイダとして提供される各種ドライブ | ||
| 3.Cmdlet(コマンドレット)と関数(Function) | ||
| [後編]Windows PowerShellのパワーの源は.NETオブジェクト | ||
| 1.コマンドの実行結果はオブジェクト | ||
| 2.オブジェクトが流れるパイプ | ||
| 3.クラス・ライブラリの活用 | ||
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



