1. ホーム
  2. powershell

[解決済み] PowerShellでコンソールに書き込むには?

2022-03-03 15:49:52

質問

コンソールに印刷(echo)する様々な方法について、少し混乱しています。コンソールに出力を書き込むには、次のような複数の方法があるのを見たことがあります。

Write-Host "Hello world1"
"Hello World2"
Out-Host -InputObject "Hello World3"

3つの方法とも、コンソールに出力されます。真ん中の方が何となくシンプルで冗長でなく、使いやすいと思います。また、次のような関数を書くと、そのようなことがわかります。

function GetValues()
{
    "1"
    "2"
}

やはりパイプラインで2つの文字列が返されます。

そして、まだ値をプリントアウトすることができるんだ。

foreach ($s in GetValues)
{
    Write-Host "s: " $s
}

私が発見したのは、引用符で囲まれた文字列だけを使うとカスタムホストで表示されないことがあり、その場合は 書き込みホスト を使えば、カスタムホストで値を表示させることができます。

どういうわけか、これは紛らわしいですね。それは "Print something" のエイリアスであるべきです。 Write-Host それとも何か意図があるのでしょうか?

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

PowerShell のデフォルトの動作は、パイプラインから落ちたものを、他のパイプライン要素に拾われたり変数に代入されたり(あるいはリダイレクトされたり)することなく、すべて Out-Host . 何 Out-Host は、明らかにホスト依存です。

パイプラインから落ちるものをそのままにするのは ではなく の代わりとなるものです。 Write-Host これは、ホストアプリケーションにテキストを出力するためだけに存在するものです。

出力が必要な場合は Write-* コマンドレットを使用します。関数からの戻り値が必要な場合は、コマンドレットを使用せずに、そこにオブジェクトをダンプするだけです。