Windows PowerShell : Windows Power Shell を XPで使ってみる

投稿日:2011年01月22日

Windows PowerShell とは

2006年11月14日に、スペインのバルセロのIT Forum で発表された、Windows 用の コマンドラインシェル & スクリプティング言語。
Windows XP / Vista / Windows Server 2003 に対しては、Microsoft HomePageからダウンロードする形で提供されている。
Windows 7 / Windows Server 2008 には標準でインストールされている。

ダウンロードと導入

以下のサイトより、ダウンロードする。

image

ダウンロードの詳細 : Windows XP 用 Windows PowerShell 1.0 インストール パッケージ (ローカライズ版) (KB926140)

上記は、Power Shell 1.0。この記事を書いている時点で、Power Shell 2.0が最新。Power Shell 2.0にするには、以下のパッチを適用する。

ダウンロードの詳細 : Windows XP 用更新プログラム (KB968930)

からダウンロードする。ローカライズ版なっているのは、エラー時のメッセージなどが日本語になっているためだろうか。。
インストールは簡単で、「「次へ」で導入できる。

image
導入後、起動すると紺色の画面が現れる。
PS が各行の先頭についているのは、 “Power Shell” である事を明示的に示している。

簡単なスクリプトの実行

テストスクリプトを作る。例えば、以下の様なものを作って helloworld.ps1 という名前で保存する。
拡張子に数字が入っているのでちょっと奇妙な感じがするが、ps1 というのが、PowerShell に関連づけられている拡張子になる。

Write-Host  Hello World

Write-Host が、UNIX/Linux で言う所の echo になる。但し私の環境( Windows XPのせい?) では、Write-Host “hello test” >> output.txt  の様にファイルにリダイレクトができなかった。

次にこのスクリプトを実行する。実行時は、 .\helloworld.ps1 の様に、ファイル名の前にパスを明示的に指定する。(UNIX /Linux のシェルと同じ感覚で考える。どこでもファイル名で実行できた bat ファイルとは違う
はじめて ps1 スクリプトを実行しようとすると、以下のエラーがでる。

PS C:\temp>  .\helloworld.ps1
スクリプトの実行がシステムで無効になっているため、ファイル C:\temp\hello.ps1 を読み込めません。詳細については、「get-hlep about_signing」と入力してヘルプを参照して下さい。
発生場所 行:1 文字 12
+ ./Hello.ps1 <<<<

初回の実行時は、権限が無いのでエラーが出る。
はじめは、自分で(ローカルで)作ったスクリプトも実行できない権限になっている。そのためスクリプトが実行できるように権限を設定する。(この設定は、次回に PowerShell を立ち上げた時にも保存されている)

Set-ExecutionPolicy RemoteSigned

権限には何段階かあって、権限をさらにきつくする事もゆるめる事もできる。
スクリプトに対して実行権限をつけたのは、ワームなどに利用されないための対策のようだ。スクリプトが「リモート」で作成されたもの「ローカル」で作成されたものか。という概念が導入されている。
詳細は、「get-hlep about_signing」を実行すると表示してくれる。「RemoteSigned」は以下の権限。ローカルで作成されていないスクリプトに対してはデジタル署名が必要になる。

RemoteSigned
– スクリプトを実行できます。
– インターネットからダウンロードされたスクリプトおよび構成ファイル
(電子メール プログラムとインスタント メッセージング プログラムを
含みます) に対して、信頼された発行元によるデジタル署名が必要です。
– ローカル コンピュータから実行されるスクリプトに対してデジタル署名
を要求しません。
– 信頼された発行元からのスクリプトを実行する前に、プロンプトは表示
されません。
– 署名されてはいても、悪意のあるスクリプトを実行するおそれ
があります。

権限を設定した後は、普通に実行できる。

PS C:\temp> .\helloworld.ps1
Hello world
PS C:\temp>

コマンドラインからの実行

わざわざ、シェルにしなくても、コマンドラインからもそのまま実行することができる。

PS C:\temp> Write-Host Hello World
Hello World
PS C:\temp>

また、入力補完機能があるので、

PS C:\temp> write-h

まで書いて、「TAB」キーを押すと

PS C:\temp>Write-Host

と入力保管してくれる。