PowerShell中Write-Host和Write-Output之間的區別是什麼?寫主機和寫輸出之間的PowerShell區別?
像...
Write-Host "Hello World ";
Write-Output "Hello World";
PowerShell中Write-Host和Write-Output之間的區別是什麼?寫主機和寫輸出之間的PowerShell區別?
像...
Write-Host "Hello World ";
Write-Output "Hello World";
簡而言之,Write-Host
寫入控制檯本身。把它看作VBScript中的MsgBox。另一方面,Write-Output
寫入流水線,所以下一個命令可以接受它作爲輸入。您不需要使用Write-Output
來編寫對象,因爲Write-Output
已隱式地爲您調用。
PS> Get-Service
將是相同的爲:
PS> Get-Service | Write-Output
Write-Output
發送數據作爲通過管道的對象。在問題示例中,它只會傳遞一個字符串。
write-host
是主人的。在控制檯write-host
基本上是做[console]::WriteLine
。 有關更多信息,請參見this。
寫輸出將輸出發送到管道。從那裏它可以傳送到另一個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,這通常是控制檯,所以最終結果看起來是一樣的。
寫主機和寫輸出之間的另一個區別是:
寫主機在屏幕上顯示的消息,但它並沒有將其寫入日誌
寫輸出寫入給日誌的消息,但不會在屏幕上顯示。
而寫主機被認爲是有害的。你可以在Write-Host Considered Harmful中看到詳細的解釋。
我發現寫輸出更有害。你如何確保一個函數實際返回你的預期結果,而不是一個命令的一些意外的垃圾輸出? – MKesper
只是爲了澄清未來的讀者。 'Write-Ouput'發送對象。這次它是一個字符串,但通常它會發送對象,並且通常不需要使用,因爲它是輸出結果/數據的默認方式:) –
好點。我更新了我的答案。謝謝 –