2013-11-03 82 views

回答

23

簡而言之,Write-Host寫入控制檯本身。把它看作VBScript中的MsgBox。另一方面,Write-Output寫入流水線,所以下一個命令可以接受它作爲輸入。您不需要使用Write-Output來編寫對象,因爲Write-Output已隱式地爲您調用。

PS> Get-Service 

將是相同的爲:

PS> Get-Service | Write-Output 
4

Write-Output發送數據作爲通過管道的對象。在問題示例中,它只會傳遞一個字符串。

write-host是主人的。在控制檯write-host基本上是做[console]::WriteLine。 有關更多信息,請參見this

+2

只是爲了澄清未來的讀者。 'Write-Ouput'發送對象。這次它是一個字符串,但通常它會發送對象,並且通常不需要使用,因爲它是輸出結果/數據的默認方式:) –

+0

好點。我更新了我的答案。謝謝 –

7

寫輸出將輸出發送到管道。從那裏它可以傳送到另一個cmdlet或分配給一個變量。 寫主機將其直接發送到控制檯。

$a = 'Testing Write-OutPut' | Write-Output 
$b = 'Testing Write-Host' | Write-Host 

Get-Variable a,b 

輸出:

Testing Write-Host 

Name       Value                 
----       -----                 
a        Testing Write-OutPut             
b             

如果不將其分配給一個變量或將其輸送至anoher命令告訴PowerShell來做什麼用的輸出管道,然後被髮送到out-default,這通常是控制檯,所以最終結果看起來是一樣的。

3

寫主機和寫輸出之間的另一個區別是:

  • 寫主機在屏幕上顯示的消息,但它並沒有將其寫入日誌

  • 寫輸出寫入給日誌的消息,但不會在屏幕上顯示。

而寫主機被認爲是有害的。你可以在Write-Host Considered Harmful中看到詳細的解釋。

+0

我發現寫輸出更有害。你如何確保一個函數實際返回你的預期結果,而不是一個命令的一些意外的垃圾輸出? – MKesper