コマンドラインで計算

一見するとコマンドプロンプトに似ているPowerShellですが、いろいろな違いがあります。例えばPowerShellのプロンプトに「20 * 5 + 10 / 3」など、数式を入力してみましょう。

数式の計算結果を表示するPowerShell

PowerShell使用中、電卓代わりにも使えそうです。しかも、ちゃんと数式の計算優先順位を正しく評価しています。

さらに、PowerShellでは.NET Frameworkの全機能を使えます。算術関数を使うには、「[math]::関数名」と入力して下さい。たとえば、5の平方根は「[math]::sqrt(5)」で計算できます。

.NET FrameworkのSystem.mathクラスから、sqrt()メソッド(関数)を呼び出して計算しています

※ .NET Frameworkのクラスやメンバに関しては、Microsoft TechNetで検索するといいでしょう。たとえば「Mathクラス」をキーワードに検索すると、算術関数などを調べることができます。ただ、Visual BasicやC#などのプログラミング経験がないと、取っつきにくいかもしれません。

文字列処理

次に文字列を見てみましょう。まず、「"mycom"」と入力して実行してみます。次に「"mycom".length」と入力してみましょう。また、"mycom".ToUpper()と実行してみましょう。

文字列に「.length」をつけると文字数を表示、「.ToUpper()」をつけると大文字変換

オブジェクト指向プログラム言語の経験があれば、ピンとくると思います。.lengthは.NET Frameworkのオブジェクトのプロパティです。.ToUpper()は大文字変換のメソッド(メンバ関数)です。つまり、"mycom"はオブジェクトなのです。

PowerShellでは、すべての数値、文字列、コマンドレット等はオブジェクトとして扱います。オブジェクトなどというといきなり敷居が高くなったと思うかもしれませんが、まずは便利に使うための方法だと思って下さい。使っているうちに慣れてきます。

※ 数値型のオブジェクトのプロパティやメソッドを使うときは、()を使用します。たとえば数値25をToString()メソッドで文字列に変換するときは「(25).ToString()」というように記述します。

PowerShellのパイプ

コマンドライン操作で、オブジェクトの効果が大いに発揮されるのはパイプ処理です。

パイプはコマンドプロンプトやUNIX系OSではポピュラーな使い方です。例えば、コマンドプロンプトで「type address.txt | sort」と実行すると、typeコマンドの出力結果をsortコマンドで文字コード順に並べ替えて表示します。

「type address.txt」の実行結果。元のテキストファイルをそのまま表示

「type address.txt | sort」の実行結果。typeの出力をsortの入力として、元のテキストファイルを行単位に並べ替えます

|がパイプ処理を行う記号で、左側のコマンドの結果を、右側のコマンドの入力として処理します。ただし、コマンドプロンプトであっても、UNIX系OSのシェルであっても、パイプ処理はすべて標準入出力と呼ばれる文字データの流れとして処理します。PowerShellの画期的なところは、こうしたパイプ処理をオブジェクトで扱うことです。

たとえば、Get-ChildItemの出力結果は次の通りです。

「Get-ChildItem address.txt」の実行結果。ファイルの属性(Mode)、更新日時、サイズ、ファイル名を表示します

Get-ChildItemの実行結果を、書式を整えるFormat-Listで加工するように、「Get-ChildItem | Format-List *」を実行してみましょう。

「Get-ChildItem | Format-List *」の実行結果。最後の「*」は、Format-Listですべてのプロパティを表示します

単に表示書式を変更しただけではなく、元のGet-ChildItemの表示結果にはなかった、ファイル作成日時、アクセス日時、バージョン番号等が表示されていることに注目して下さい。もし、パイプがテキスト処理なら、元のテキストになかった情報が後から出てくることなどあり得ません。これはパイプがオブジェクト渡しだからできることです。

Get-ChildItemの出力結果はファイルの詳細情報を含むオブジェクトですが、Get-ChildItemでは、一部の情報だけを表示しました。Format-ListはGet-ChildItemが表示しなかった情報を表示したのです。

※ パイプとセットとして語られる機能にリダイレクトがあります。リダイレクトは出力先を変更する操作で、「>」や「<」で表現します。たとえば、「Get-ChildItem > fileinfo.txt」とすると、Get-ChildItemの出力先を画面ではなく、fileinfo.txtというテキストファイルにして保存します。パイプやリダイレクトは、「A | B | C > D」というようにいくつもつなげることもできます。

知っておくと便利なコマンドレット

ここで、これからPowerShellを使って行くに当たって知っておくと便利なコマンドレットを3つ紹介します。

(1)Get-Help

ヘルプを表示します。例えば、Get-ChildItemの使い方を知りたいとき、「Get-Help Get-ChildItem」と入力します。コマンドレット名の一部しかわからない、あるいは同じジャンルのコマンドレットをまとめて表示したいときは、ワイルドカードも使用できます。たとえば、「Get-Help Format-*」と実行すれば、Format-ListやFormat-Tableなどのコマンドレットを一覧表示します。

(2)Get-Command

コマンドレットの一覧を表示します。

(3)Get-Member

入力されたオブジェクトのメンバを表示します。たとえば、「Get-ChildItem | Get-Member」と実行すると、Get-ChildItemが出力したオブジェクトのメンバ(プロパティやメソッド)を確認できます。たとえば、文字列型オブジェクトで使えるメンバを知りたいときは、「"a" | Get-Member」と実行します。

なお、拡張子exeの実行ファイルなどは、コマンドプロンプトと同様にPowerShellのプロンプトでも起動できます。