MSのTechNetにあるWrite-Hostの説明は非常に簡潔で、
表示したいリテラルをひとつ、直接指定する
表示の際に文字色と背景色を指定できる
実行後の改行をキャンセルする"-nonewline"オプションがある
の三つだけが書かれています。
変数だって指定できるしコマンドの実行結果だって指定できる
変数に関しては、まぁ敢えて説明されなくても普通にできると思っちゃうよね。
(*'-') >> $msg="Hello world!"
(*'-') >> Write-Host $msg
Hello world!
じゃあコマンドの実行結果は?
(*'-') >> Write-Host Get-Date
Get-Date
…失敗。てかクォートしなくてもリテラル指定できるのか。
(*'-') >> Write-Host (Get-Date)
2015/10/25 9:42:45
正解はこう。コマンドを丸括弧で括ると実行結果に置き換わってWrite-Host
に渡される。
値も変数も実行結果も一緒くたに指定できた
素数判定のスクリプトを書いてみた。
(*'-') >> ./isPrime.ps1 201510250953
NOT prime.
これを使ってたとえば1から10について素数判定した結果を表示する時。
(*'-') >> foreach ($n in 1..10) { Write-Host $n "is" (./isPrime.ps1 $n)}
1 is Not Applicable.
2 is Prime.
3 is Prime.
4 is NOT prime.
5 is Prime.
6 is NOT prime.
7 is Prime.
8 is NOT prime.
9 is NOT prime.
10 is NOT prime.
このようにWrite-Host
に対して続けざまに引数を与えると、すべて連続して表示してくれる。しかもご丁寧に空白で区切って。
ということに今朝気づいた。