[運用]
|
|
本稿最後のトピックは、.NET Frameworkクラス・ライブラリの利用方法だ。前回、コマンドレットは.NET Frameworkオブジェクトを返すと解説したが、PowerShellではただコマンドレットから返されるオブジェクトを利用できるばかりではない。自ら.NET Frameworkが提供するクラスをインスタンス化して、スクリプトの中で利用することも可能だ。これによって、スクリプト上でVisual BasicやC#と限りなく同等の操作を行うことができる点は、PowerShellを利用する最大のメリットであるともいえるだろう。
例えば、以下は.NET Frameworkが提供するMailMessageクラス(電子メールのメッセージを管理するクラス)、SmtpClientクラス(SMTPサーバによる電子メールの送信手段を提供するクラス)を経由して、電子メールを配信するスクリプトの例だ。
|
|
| PowerShellで指定されたアドレスにメールを送信する例(Sendmail.ps1) |
コードの大まかな流れはリスト内のコメントを参照いただくとして、ここで注目していただきたいポイントは以下の2点だ。
オブジェクトを生成するNew-Objectコマンドレット
.NET クラスをインスタンス化するのは、New-Objectコマンドレットの役割だ。New-Objectコマンドレットは、リスト内(1)のように、
オブジェクト変数 = New-Object クラスの完全修飾名(引数,...) |
の構文で記述できる。New-Objectコマンドレットは、インスタンス化されたオブジェクトを返すので、後は、
オブジェクト変数.プロパティ名 [= 値] |
のように「.」演算子を介して、オブジェクトのメンバにアクセスすればよい。
Visual Basic/C#に精通されている方ならば、New/new演算子がNew-Objectコマンドレットに置き換わっただけだと思えば、ごく直感的にPowerShell上でも.NETオブジェクトが利用できることが理解できるだろう。ただしいくつかの点でVisual BasicやC#とは異なるポイントもあるので、要注意だ。
■1.クラス名は完全修飾名で指定すること
PowerShellでは、現時点でVisual Basic/C#におけるImports/usingに相当する命令は存在しない。つまり、クラス名を指定する場合には必ず名前空間を含んだ完全修飾名で指定する必要がある。ただし例外的に名前空間の先頭の「System.」だけは省略することが可能である。従って次の2つの文は等価だ。
※次の2つの文は等価 |
■2.引数が存在しない場合はカッコも省略すること
引数を持たないコンストラクタを呼び出す場合、Visual Basic/C#に慣れている方は、自然と、
$mail = New-Object System.Net.Mail.MailMessage() |
のように記述するはずだ。しかしPowerShellではこれは不可である。上のようなコードを記述した場合、以下のようなエラーメッセージが返される。
式が '(' の後に必要です。 |
というのも、PowerShellでは疑似的にVisual Basic/C#によく似た構文を提供しているが、(当然のことながら)厳密にはPowerShellのNew-Objectコマンドレットと、Visual Basic/C#のコンストラクタとはまったく異なるものだからだ。ここで、厳密なNew-Objectコマンドレットの構文を見てみよう。
New-Object [-typeName] <string> [[-argumentList] <object[]>] |
つまり、「New-Object System.Net.Mail.MailMessage(〜)」としているのは、それぞれ「System.Net.Mail.MailMessage」は-typeNameパラメータ(型名)の値を、「(〜)」は-argumentListパラメータ(引数リスト)の値を表しているわけだ。もっといえば、「(〜)」の中身はPowerShellにおける配列(カンマ構文)を表しているわけである。そのため、「()」のような中身を持たない式はエラーとして弾かれる結果となる。
静的メンバにアクセスする「::」演算子
PowerShellでは、インスタンスメソッド/プロパティにアクセスする場合と、静的メンバにアクセスする場合とで、使用する演算子が異なる点も要注意である。静的メンバにアクセスする場合には(ドット演算子ではなく)「::」演算子を利用する必要がある。当然、「::」演算子を利用する場合には、演算子の左オペランドは型名(クラス名)でなければならない。
[System.Text.Encoding]::GetEncoding("ISO-2022-JP") |
クラス名の表記については、先ほども指摘したように、必ず完全修飾名で記述しなければならない点も、いま一度確認しておこう。
■
以上、非常に早足ではあったが、PowerShellでスクリプトを記述するに当たって、最低限理解しておきたい構文規則について概説してきた。すでにほかの言語を理解している方にとっては、PowerShellの言語構文がごくごくなじみやすいルールで成り立っていることがお分かりいただけただろう。もっとも本稿を見ても分かるように、(もちろん)PowerShellにはPowerShell独自の構文や、似ているが少しだけ異なる構文も多々存在する。これまでスクリプト言語に触れてきた方が、そうしたPowerShell独自の構文で頭を悩ませないよう、本稿がその一助となれば幸いである。
本稿では分量の都合上、PowerShellを利用した具体的なコード例にまでは踏み込むことはできなかったが、具体的な活用例については、今後、Windows TIPSなどで順次紹介していければと考えている。どうぞお楽しみに。![]()
| INDEX | ||
| [運用]Windows PowerShellコマンド&スクリプティング入門(前編) | ||
| PowerShellの基本 | ||
| 1.PowerShellを始めよう | ||
| 2.PowerShellをインストールする | ||
| 3.キーワード1「コマンドレット」―PowerShellを操作する基本コマンド | ||
| 4.キーワード2「.NETオブジェクト」―コマンドレットの戻り値はオブジェクト | ||
| 5.キーワード3「ドライブ」―データソースへのアクセスを一元化する | ||
| [運用]Windows PowerShellコマンド&スクリプティング入門(後編) | ||
| PowerShellスクリプティングの第一歩 | ||
| 1.PowerShellスクリプトの基本 | ||
| 2.PowerShellの変数 | ||
| 3.PowerShellの制御構文 | ||
| 4.PowerShellの関数 | ||
| 5..NET Frameworkのクラスを利用する | ||
| Windows運用 |
TechTargetジャパン
- WebサーバのSSL証明書が「正しい」か確認する (2012/2/10)
SSLに必要なサーバ証明書の取得/インストールのミスはWebサイトの信頼を失墜させかねない。証明書ベンダ提供のツールで手軽かつ確実にチェックしよう - クライアントでも利用可能になるHyper-V 3.0とは? (2012/2/9)
Windows 8では、従来のWindows Virtual PCに代わって新しくHyper-V 3.0がクライアント向けにも導入される。その概要を解説 - 第303話 ペアプロ2 (2012/2/7)
あっ、またまたいつぞやの幽霊が! …っと思ったら、何だ倉井さんかぁ…。はぁー、驚いた… - Excelで郵便番号変換ウィザードを活用する (2012/2/3)
Excelで管理している顧客名簿などで、不足している郵便番号や住所を入力するのは意外と面倒。郵便番号変換ウィザードを使えば、これらの入力が簡単になる
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
