特集:Windows PowerShellレビュー(前編)次世代Windowsシェル「Windows PowerShell」を試すデジタルアドバンテージ 遠藤 孝信 |
![]() |
|
|
|
Cmdlet(コマンドレット)
次にCmdletについて見てみよう。先述したように、CmdletはPowerShellに内蔵されている(外部のEXEファイルなどではない)コマンドのことであり、現在のバージョンでは合計129個のCmdletが標準で用意されている。
■コマンドを検索するGet-Commandコマンド
利用可能なCmdletの一覧は、「Get-Commandコマンド」により表示できる。このコマンドをパラメータなしで実行すると、Cmdletのコマンド名と指定可能なパラメータが一覧表示される。
|
|
| Get-CommandコマンドによるCmdletの一覧表示 |
(このコマンドに限らず)通常の出力では画面からはみ出した部分が右端で省略されてしまうが、パイプと「Format-Listコマンド」を使えば、より詳しい形式での表示も可能だ。また、1画面ずつスクロールさせるにはmoreコマンド(moreコマンドの実体は次項で述べる「関数」)も用意されている。
![]() |
| 「Get-Command | Format-List | more」の実行結果 |
| Get-Commandコマンドの出力を、詳細な形式で1画面ずつスクロールさせながら見ていくことができる。 |
逆に、短い形式でたくさん表示したい場合には、「Format-Wideコマンド」を利用する。このコマンドにはカラム数を指定する「-Columnオプション」やカラム数を自動調節する「-AutoSize」などが用意されている。
|
|
| Format-Wideコマンドを使用した短い形式での出力 | |
| 「-Columnオプション」使用時には、列内に表示しきれない項目は末尾部分が省略される。省略させずに画面の幅いっぱいまで表示するには「-AutoSizeオプション」を使えばよい。 |
冒頭のaliasコマンドのときと同様に、利用可能なCmdletの一覧は別ページ「command.html」に用意した。このcommand.htmlは次のようなコマンドで作成したものだ。今回は<table>タグへの「border=1」の追加もコマンドラインに含めている。
|
|
| Cmdletの一覧をcommand.htmlに出力 | |
| ここでは詳細な説明は割愛するが、foreachコマンドはパイプから得た各データについて{}ブロック内を実行する。そのそれぞれのデータは特殊なシェル変数「$_」で示され、それに対して「-replaceオペレータ」で<table>を<table border=1>に置換している。 |
Get-Commandコマンドは通常、使いたいコマンドの名前が一部しか分からないときなどに使用する。次の例は、Cmdletの名詞部分が「alias」であるCmdletの一覧を表示する。
|
|
| Get-Commandコマンドによるコマンドの検索 | |
| 名詞部分が「alias」のCmdletを一覧表示している。 |
パラメータにはワイルドカード(*、?、[a-z]など)も利用できるが、この場合にはCmdlet以外の実行可能なコマンド(エイリアスや関数、スクリプト・ファイル、外部アプリケーション)なども検索対象となるようだ。
ちなみにCmdletでは、オプション名をほかのオプション名と区別できる範囲で省略できる。例えばGet-Commandコマンドの「n」で始まるオプションには「-Noun」と「-Name」があるが、これらはそれぞれ「-No」「-Na」と省略できる。
■ヘルプの表示
各Cmdletの使い方を見るには、「-?」オプションを指定して実行すればよい。これは「get-helpコマンド」のパラメータにCmdlet名を指定しても同じ出力を得られる。以下の例では、Get-Helpコマンドのヘルプを表示している。
|
|
| get-helpコマンドによるヘルプの表示 | |
| ここではget-helpコマンドのヘルプを表示している。これは「Get-Help get-help」を実行しても表示できる。 |
ヘルプの形式はUNIXのmanコマンドに似ている。
関数(Function)
エイリアスやCmdlet以外でPowerShellの実行可能な内蔵コマンドとしては関数(Function)がある。
関数とは、PowerShellで決められているスクリプト言語の文法(これはC#に似ている)に従って記述した一連のコードに名前を付けたものだ。関数はコマンドラインからも定義できるし、スクリプト・ファイル内でも定義できる。
ところで、コマンド・プロンプトでは「C:」や「D:」のみの実行でカレント・ドライブを切り替えることができる。そしてこれはPowerShellでも可能だ。しかし、「Alias:」や「HKLM:」は駄目である。これはなぜかというと、実は「C:」や「D:」という名前の関数があらかじめ定義されているのだ。
すでに見てきたように、関数に対してはプロバイダが用意されているため、次のようにして現在定義されている関数の一覧を見ることができる。
|
|
| dirコマンドによる定義済み関数の一覧表示 | |
| 途中省略しているが、AからZまでのドライブ用にあらかじめ関数が用意されている。現在のPowerShellのバージョンでは、これらの関数はすべてハードコーディングされているようだ。 |
「C:」と同様な「Alias:」という関数を定義するには、「function」というキーワードを用いて次のようなコマンドを実行すればよい*。
|
|
| 「Alias:関数」の定義 | |
| ここでは「Alias:」という関数を定義し、その内容を確認した後、それを実行している。「Alias:」が実行されると、実際には「Set-Location Alias:」が実行される。これはカレント・ドライブをAliasドライブに切り替える。関数名に「:」が利用できるところがミソだ。 |
| * エイリアスで実現できてもよさそうな気がするが、現バージョンではエイリアスは1つのCmdletか実行ファイルの名前のみに対してしか定義できないようだ(パラメータを指定したCmdletをエイリアスできない)。 |
ちなみに、以下のようなスクリプトを実行すれば、すべての有効なドライブに対して「<ドライブ名>:」という関数を定義できる。
|
|
| 全ドライブに対して「<ドライブ名>:」という関数を定義するスクリプト | |
| Invoke-Expressionコマンドはパラメータで指定された文字列をシェルへの入力として実行する。 |
■プロンプトの定義
関数の中でもpromptという関数は少し特別で、この関数の出力はシェルのプロンプトの表示に使用される。これによりプロンプトを自分の好みに簡単に変更できる。
たいていのシェルでよくある例だが、次の例ではプロンプトで日時を表示するようにしている。
|
|
| prompt関数の定義によるプロンプトの変更 | |
| ここではデフォルトのprompt関数の内容を表示した後、プロンプトに日時を表示するようにprompt関数を再定義している。 |
■プロファイルの記述
日常的に使う関数やエイリアスは、プロファイルに記述しておけばPowerShellの起動時に自動的に実行される。PowerShellのプロファイルには何種類か用意されているが、その1つはマイドキュメントのPSConfigurationフォルダ内にある「profile.ps1」である。
|
|
| PowerShellのプロファイル「profile.ps1」の記述例 | |
| マイドキュメントのPSConfigurationフォルダ内にある「profile.ps1」にエイリアスや関数を定義しておけばPowerShellの起動時に読み込まれる。 |
ただしprofile.ps1が実行されるようにするには、すでに述べたように「Set-ExecutionPolicyコマンド」により、スクリプトの実行ポリシーを「Unrestricted」などに変更しておく必要がある。
PowerShellでは「デジタル署名されているスクリプトのみ実行可能(AllSigned)」などの設定も可能で、スクリプトの実行に関してかなりセキュリティを厳しくしている。デフォルトは「Restricted」で、この設定ではすべてのスクリプト・ファイルが実行できない(対話式シェルとしてのみ利用可能)。
■
以上、今回はエイリアス、ドライブ(プロバイダ)、CmdletなどのPowerShellの機能要素を中心にまずは解説した。まったく新しくシェルでありながら、現行のコマンド・プロンプトでのオペレーションなどもうまくフォローしているといった感じだろうか。
しかしPowerShellで本当に注目すべきはそのような部分ではない。PowerShellの真の威力は、すべてのオペレーションが.NET Frameworkのオブジェクトに基づいている点にある(すでにお気づきのようにPowerShellではパイプの中を流れるデータは単なるテキストではないのだ)。次回後編ではこの点を中心にPowerShellについて見ていく予定だ。
なお、残念ながらPowerShellはWindows Vistaには標準搭載されないらしいが、Microsoftの発表によると正式版のリリースは2006年の後半とされている(より正確には2006年の第4四半期らしい)。![]()
| INDEX | ||
| [特集]Windows PowerShellレビュー | ||
| [前編]次世代Windowsシェル「Windows PowerShell」を試す | ||
| 1.エイリアスが基本となるオペレーション | ||
| 2.プロバイダとして提供される各種ドライブ | ||
| 3.Cmdlet(コマンドレット)と関数(Function) | ||
| [後編]Windows PowerShellのパワーの源は.NETオブジェクト | ||
| 1.コマンドの実行結果はオブジェクト | ||
| 2.オブジェクトが流れるパイプ | ||
| 3.クラス・ライブラリの活用 | ||
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



