PowreShell – Write-Host と Write-Output の違い (1)

Windows Powershell の Write-Host と Write-Output の違いについて説明します。

配列

配列の内容を出力すると、Write-Host は改行なしで出力し、Write-Output は改行ありで出力します。

$s = "A", "B"
PS C:\> Write-Host $s
A B
PS C:\> Write-Output $s
A
B

数値や文字列

数値や文字列をカンマ区切りで出力すると、Write-Host は改行なしで出力し、Write-Output は改行ありで出力します。

PS C:\> Write-Host "A", "B"
A B
PS C:\> Write-Output "A", "B"
A
B

数値や文字列

数値や文字列をスペース区切りで出力すると、Write-Host は改行なしで出力し、Write-Output は改行ありで出力します。尚、この場合 Write-Output は省略できません。

PS C:\> Write-Host "A" "B"
A B
PS C:\> Write-Output "A" "B"
A
B

連想配列

連想配列の内容を出力すると、Write-Host はクラス名を出力し、Write-Output は連想配列の内容を出力します。

PS C:\> $s = @{A = "Apple"; M = "Melon"}
PS C:\> Write-Host $s
System.Collections.DictionaryEntry System.Collections.DictionaryEntry
PS C:\> Write-Output $s

Name Value
---- -----
A Apple
M Melon

数値の計算式

数値の計算式をそのまま記述した場合、どちらも単なる文字列とみなし、単純に計算式を表す文字列として出力します。違いは上記同様改行するかしないかだけの違いです。尚、実際に計算した場合には計算式を表す文字列を式として指定するために丸カッコでくくります。

PS C:\> Write-Host 1 + 2
1 + 2
PS C:\> Write-Output 1 + 2
1
+
2
PS C:\> Write-Host (1 + 2)
3
PS C:\> Write-Output (1 + 2)
3