Frameworkクラス・ライブラリの利用方法だ。Frameworkオブジェクトを返すと解説したが、PowerShellではただコマンドレットから返されるオブジェクトを利用できるばかりではない。Frameworkが提供するクラスをインスタンス化して、スクリプトの中で利用することも可能だ。BasicやC#と限りなく同等の操作を行うことができる点は、PowerShellを利用する最大のメリットであるともいえるだろう。Frameworkが提供するMailMessageクラス(電子メールのメッセージを管理するクラス)、SmtpClientクラス(SMTPサーバによる電子メールの送信手段を提供するクラス)を経由して、電子メールを配信するスクリプトの例だ。@"こんにちは、PowerShell!PowerShellでスクリプティングに挑戦しましょう。System.Net.Mail.SmtpClient("smtp.examples.ne.jp")$smtp.Send($mail)PowerShellで指定されたアドレスにメールを送信する例(Sendmail.ps1)コードの大まかな流れはリスト内のコメントを参照いただくとして、ここで注目していただきたいポイントは以下の2点だ。クラスをインスタンス化するのは、New-Objectコマンドレットの役割だ。クラスの完全修飾名(引数,...)の構文で記述できる。値]オブジェクト変数.メソッド名(引数,...)のように「.」演算子を介して、オブジェクトのメンバにアクセスすればよい。Basic/C#に精通されている方ならば、New/new演算子がNew-Objectコマンドレットに置き換わっただけだと思えば、ごく直感的にPowerShell上でも.NETオブジェクトが利用できることが理解できるだろう。BasicやC#とは異なるポイントもあるので、要注意だ。Basic/C#におけるImports/usingに相当する命令は存在しない。クラス名を指定する場合には必ず名前空間を含んだ完全修飾名で指定する必要がある。例外的に名前空間の先頭の「System.」だけは省略することが可能である。従って次の2つの文は等価だ。System.Net.Mail.MailMessage()のように記述するはずだ。PowerShellではこれは不可である。上のようなコードを記述した場合、以下のようなエラーメッセージが返される。Basic/C#のコンストラクタとはまったく異なるものだからだ。ここで、厳密な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独自の構文で頭を悩ませないよう、本稿がその一助となれば幸いである。TIPSなどで順次紹介していければと考えている。