[ホーム] > [間違えやすい類語 IT編一覧] > [Write-Host、Write-Output 、echo の使い分けはとても重要]
PS C:\> write-host "test" | Out-Null
test
write-output はパイプ処理により次の処理に渡される。よってOut-Nullで捨てられる。
PS C:\> write-output "test" | Out-Null
戻り値
関数内でWrite-Output や echo を使用すると標準出力への出力ではなく、戻り値として設定されてしまうようです。よって標準出力への出力を行う場合は、Write-Hostを使うべきです。リダイレクト
ファイルへリダイレクトする場合は注意が必要です。Write-host は直接標準出力に書き込むため、ファイルへのリダイレクトはできません。要するに以下のようなコードではファイルへは出力されません。
write-host > test.txt
リダイレクトしたい場合は 以下のようなコマンドを実行します。
write-output > test.txt
(注意)分かりやすく簡単に記載しており、一部の環境や分野では記載内容が異なる可能性があります。あくまでも参考程度でお読みください。
比較表
比較は以下の表の通りとなります。
説明 Write-Host Write-Output echo 機能 コンソールに直接書き込む。よってパイプラインで処理したりファイルへリダイレクトすることはできない。 出力ストリームに書き込む。よってパイプラインで渡したりファイルへリダイレクトすることが可能。 Write-Output のエイリアス。write も同じ。 コンソール上で実行 コンソールに出力される。 コンソールに出力される。(パイプライン処理で最後の処理が指定されない場合、デフォルト(Out-Default)がコンソール出力のため) コンソールに出力される。 関数(ファンクション)内で実行 コンソールに出力される。 戻り値に設定される。 戻り値に設定される。 機能 文字をコンソールに出力する。 文字を標準出力へ出力する。もし Write-Output がパイプラインの最後の場合は、コンソールへ出力される。 Write-Output と同じ。 Start-Transcriptでのファイルへ出力 出力される (古いバージョンのPowershellではファイルに出力されない不具合があった) 出力される 出力される 関数(ファンクション)内での実行例 > $x = Write-Host "123"
123
> echo $x
(なし)
#上記の通り、単に標準出力に出力するだけで関数には影響を与えない。>$x = Write-Output "123"
>Write-Host $x
123
#上記の通り、Write-Outputは関数の戻り値に設定される。>$x = echo "123"
> Write-Host $x
123
#上記の通り、echo は関数の戻り値に設定される。実行図 (実は)echo は Write-Output の エイリアスです。同じものです。writeも同じです。以下のコマンドで alias を確認することが可能です。
PS> Get-Alias echo
CommandType Name Version Source
----------- ---- ------- ------
Alias echo -> Write-Output
PS> Get-Alias write
CommandType Name Version Source
----------- ---- ------- ------
Alias write -> Write-Output
Workflow 内での動作
Workflow からの他 ps1 ファイル(Bと呼ぶ)を呼び出した場合、B で Write-OutputしてもStart-Transcript でファイルに記録されないという現象が発生した。(Write-Hostsでは出力される。)同じく BでWrite-Output がコンソールでも出力されないという不具合が発生した。原因は調査中。
[ホーム] > [間違えやすい類語 IT編一覧]
,
【注意】本ページは著作権で保護されています。内容は何人も補償しません。時間的あるいは金銭的損失等、一切保証しません。
理解しやすく記載されており、一部不正確な記載がある可能性があります。ご自身の責任で参考にしてください。