1. ホーム
  2. powershell

[解決済み】「Write-Host」、「Write-Output」、「[console]::WriteLine」の違いは何ですか?

2022-04-13 18:20:36

質問

メッセージを出力する方法には、さまざまなものがあります。このような場合、どのような違いがあるのでしょうか? Write-Host , Write-Output または [console]::WriteLine ?

とすると気づくこともあります。

write-host "count=" + $count

+ が出力に含まれるようになります。なぜでしょうか?この式は、書き出される前に、連結された1つの文字列を生成するために評価されるべきではないでしょうか?

どのように解決するのですか?

Write-Output は、パイプラインでデータを送りたいが、必ずしも画面に表示したいわけではない場合に使用します。パイプラインは最終的にそれを out-default は、他に何も使用されていなければ、最初に

Write-Host は、その逆をしたいときに使います。

[console]::WriteLine は、基本的に Write-Host は裏でやっている。

このデモコードを実行し、結果を調べてみてください。

function Test-Output {
    Write-Output "Hello World"
}

function Test-Output2 {
    Write-Host "Hello World" -foreground Green
}

function Receive-Output {
    process { Write-Host $_ -foreground Yellow }
}

#Output piped to another function, not displayed in first.
Test-Output | Receive-Output

#Output not piped to 2nd function, only displayed in first.
Test-Output2 | Receive-Output 

#Pipeline sends to Out-Default at the end.
Test-Output 

のパラメータリストをトークン化する前に、PowerShellが連結を処理するように、連結操作を括弧で囲む必要があります。 Write-Host または、文字列補間を使用する

write-host ("count=" + $count)
# or
write-host "count=$count"

ところで - これを見てください ビデオ Jeffrey Snoverがパイプラインの仕組みを説明しています。私がPowerShellを学び始めた頃、パイプラインの仕組みについて最も有用な説明だと思いました。