3 回答

TA貢獻(xiàn)1155條經(jīng)驗 獲得超0個贊
Write-Output當(dāng)您想在管道上發(fā)送數(shù)據(jù),但不一定要在屏幕上顯示數(shù)據(jù)時,應(yīng)使用。out-default如果沒有其他人首先使用它,則管道最終會將其寫入。
Write-Host 當(dāng)您想做相反的事情時應(yīng)該使用。
[console]::WriteLine本質(zhì)上Write-Host是幕后工作。
運行此演示代碼并檢查結(jié)果。
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在對的參數(shù)列表進(jìn)行標(biāo)記化之前處理該連接Write-Host,或者使用字符串插值
write-host ("count=" + $count)
# or
write-host "count=$count"
順便說一句-觀看Jeffrey Snover的這段視頻,解釋管道的工作原理?;氐轿议_始學(xué)習(xí)PowerShell時,我發(fā)現(xiàn)這是關(guān)于管道如何工作的最有用的解釋。

TA貢獻(xiàn)1877條經(jīng)驗 獲得超1個贊
除了Andy提到的內(nèi)容外,還有另一個可能很重要的區(qū)別-寫主機直接寫到主機,什么也不返回,這意味著您不能將輸出重定向到例如文件。
---- script a.ps1 ----
write-host "hello"
現(xiàn)在在PowerShell中運行:
PS> .\a.ps1 > someFile.txt
hello
PS> type someFile.txt
PS>
如圖所示,您無法將它們重定向到文件中。對于一個不小心的人來說,這也許令人驚訝。
但是,如果改用寫輸出代替,您將獲得預(yù)期的重定向工作。

TA貢獻(xiàn)1811條經(jīng)驗 獲得超5個贊
這是完成Write-Output等效的另一種方法。只需將您的字符串用引號引起來:
"count=$count"
您可以通過運行以下實驗來確保其與Write-Output相同:
"blah blah" > out.txt
Write-Output "blah blah" > out.txt
Write-Host "blah blah" > out.txt
前兩個將輸出“等等”到out.txt,但第三個不會。
“幫助Write-Output”給出了這種行為的提示:
此cmdlet通常在腳本中使用,以在控制臺上顯示字符串和其他對象。但是,由于默認(rèn)行為是在管道的末尾顯示對象,因此通常不必使用cmdlet。
在這種情況下,字符串本身“ count = $ count”是管道末端的對象,并顯示出來。
- 3 回答
- 0 關(guān)注
- 605 瀏覽
添加回答
舉報