2012-05-31 21 views
87

コンソールに印刷(エコー)するさまざまな方法について少し混乱しています。コンソールに出力を書き込む方法はいくつかあります。PowerShellのコンソールに書き込む最も良い方法

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 
} 
私はあなたのような関数を書くときにもを見つけます

私が見つけたことは、引用された文字列だけを使用してカスタムホストに表示されるとは限らず、カスタムホストに印刷する値を取得するためにWrite-Hostを使用しなければならないということでした。

どういうわけか私はこれを混乱させています。 "Print something"Write-Hostへのエイリアスまたはその意図ですか?

+2

](http://windowsitpro.com/blog/what-do-not-do-powershell-part-1) –

答えて

64

PowerShellのデフォルトの動作は、別のパイプライン要素がピックアップしたり、変数に割り当てられたり(Out-Hostにリダイレクトされない)、パイプラインから脱落したものだけをダンプすることです。どのようなOut-Hostは明らかにホスト依存です。

の代わりに、Write-Hostの代わりに、ホストアプリケーションでテキストを出力するだけの理由があります。

出力する場合は、Write-*コマンドレットを使用します。関数から戻り値を取得する場合は、コマンドレットなしでオブジェクトをダンプするだけです。

+0

Write-Hostの "Hello world"が 'statement of expected end of error'をスローするのはなぜですか? – FrenkyB

+0

わかりません。 PowerShellでここに入力すると、ここで予想される動作が示され、エラーは発生しません。 – Joey

+1

私はそれを.vbsスクリプトに入力しました。コードの行だけでエラーが出ます。 – FrenkyB

35

パイプラインに書き込みます。 Write-HostおよびOut-Hostをコンソールに書き込みます。 'echo'はパイプラインにも書き込むWrite-Outputのエイリアスです。コンソールに書き込むには、Write-Hostコマンドレットを使用するのが最善の方法です。

オブジェクトがパイプラインに書き込まれると、チェーン内の他のコマンドによってオブジェクトが消費される可能性があります。例えば:

"hello world" | Do-Something 

しかしWrite-Hostがコンソールにではなく、パイプライン(DO-何かが文字列を取得することはできません)への書き込み以来、これは動作しません:[書き込みホストは悪である

Write-Host "hello world" | Do-Something 
+3

この回答は技術的には正解ですが、新生PowerShellユーザーが迷っていると思われます。効果的なPowerShellの最初のルールは、パイプラインで役に立つ出力を生成することです。あなたがWrite-Hostを大いに使っているなら、おそらく間違っているでしょう。 – OldFart

+3

さて、OPは何を頼んだのですか?コンソールに書き込む方法は?ホストへの書き込みとパイプラインへの書き込みには違いがあり、それぞれが何をするかを知る必要があります。答えを明確にして更新します。 –

関連する問題