概要
- 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 | 論理演算子 |
それはそれでいいのだけど、演算子の優先順位を調べようと思っても、一か所にまとまった記述がなく、結構不便。
参考文献
- Part2 スクリプト言語入門 – 意外に簡単! 使って便利! コマンド環境“超”入門:ITpro <http://itpro.nikkeibp.co.jp/article/COLUMN/20080805/312155/?ST=nsw&P=5>
- PowerShell基礎文法最速マスター <http://blogs.wankuma.com/mutaguchi/archive/2010/02/13/186034.aspx>
- Windows PowerShell™ ファースト ステップ ガイド <%SystemRoot%\System32\WindowsPowerShell\v1.0\Documents\ja-JP\GettingStarted.rtf>