PowerShell で HelloWorld

概要

  • PowerShell で HelloWorld
  • PowerShell では、最初に実行ポリシーを変更しないとスクリプトを実行できない
  • スクリプトの引数は、シェル変数「$args」に入っている


とりあえず HelloWorld

先日、PowerShell ことはじめで、コマンドラインシェルとしての PowerShell の使い方を勉強したので、今日はプログラム環境としての PowerShell の使い方を勉強することにした。

牟田口大介氏のブログの最近のエントリに「PowerShell基礎文法最速マスター」というものがあったので、早速それを参照する。

コンソールに文字列を表示。
"Hello world"
コマンドレット(後述)を使用した場合。
Write-Host "Hello world"

上のほうの例は、文字列オブジェクトのリテラル表現だけでも文として成り立つということかな。とりあえず下のほうの書き方で、「helloworld.ps1」を作った。ただし、普通に実行しても、

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

このように実行できない。

「Windows PowerShell™ ファースト ステップ ガイド」(2006年9月)の30ページによると、

既定の実行ポリシーである Restricted は、最もセキュリティ レベルが高い実行ポリシーです。この実行ポリシーでは、スクリプトの実行は許可されず、Windows PowerShell プロファイルを含む構成ファイルの読み込みも許可されません。この場合でも、Windows PowerShell は対話的に使用できます。

と、デフォルトでスクリプトを実行できないように実行ポリシーが設定してあるという。そのため、

PS C:\Windows\System32> Set-ExecutionPolicy RemoteSigned

などとして、実行ポリシーを変更する必要がある。そして、Windows Vista の場合は、これを「管理者として実行」する必要がある。面倒だけど、最初だけ。

PS C:\Users\daisuke\lang\ps> ./helloworld.ps1
Hello, world.

実行できた!

引数の使い方

スクリプトが実行されたときの引数は、シェル変数「$args」に、Object[] 型で入っているらしい。引数を使うスクリプトの例は以下。

if(0 -lt $args.length) {
        $name = $args[0]
} else {
        $name = "world"
}
Write-Host ("Hello, " + $name + ".")

演算子が「-lt」みたいな形だったりするけど、おおむね C ライクな文法といえるのかな。

「else if」が「elseif」だったり、微妙に違うところもある。三項演算子(A?B:C)も、使えないぽい。

PS C:\Users\daisuke\lang\ps> ./helloworld.ps1
Hello, world.
PS C:\Users\daisuke\lang\ps> ./helloworld.ps1 PowerShell
Hello, PowerShell.

できた。

アイコンをダブルクリックして実行することはできない

ところで、Windows Script Host やバッチファイルの場合、エクスプローラーからアイコンをダブルクリックして実行したり、他のファイルをドラッグ&ドロップして実行させることが可能だった。

このような GUI による実行は非常に便利だったが、PowerShell のスクリプトでは不可能になっているようだ。「Windows PowerShell™ ファースト ステップ ガイド」11ページによると、

明らかなリスクを避けるために、Windows PowerShell のいずれの実行ポリシーにおいても、アイコンをダブルクリックしてスクリプトを実行できるようには設定されていません。詳細については、次のように入力してヘルプを参照してください。

get-help about_signing

とのこと。残念。

PowerShell では .NET Framework を使うことができるので、その気になれば GUI プログラムも作れそうだと思ったが、このように設計しているあたり、もちろんセキュリティ上の理由もあるだろうが、管理者向けのオートメーションツールであって、GUIは基本的に使わない、という方針がはっきりしているのかもしれない。

演算子の優先順位がわからない

PowerShell の演算子については、ヘルプドキュメントが下記のように充実している。

about_operator | TechNet 演算子全般
about_arithmetic_operators | TechNet 算術演算子
about_assignment_operators | TechNet 代入演算子
about_comparison_operators | TechNet 比較演算子
about_logical_operator | TechNet 論理演算子

それはそれでいいのだけど、演算子の優先順位を調べようと思っても、一か所にまとまった記述がなく、結構不便。

参考文献

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>