Apa perbedaan antara Write-Host dan Write-Output di PowerShell?
Suka...
Write-Host "Hello World ";
Write-Output "Hello World";
Apa perbedaan antara Write-Host dan Write-Output di PowerShell?
Suka...
Write-Host "Hello World ";
Write-Output "Hello World";
Jawaban:
Singkatnya, Write-Host
menulis ke konsol itu sendiri. Anggap saja sebagai MsgBox di VBScript . Write-Output
, di sisi lain, menulis ke pipeline, sehingga perintah berikutnya dapat menerimanya sebagai inputnya. Anda tidak diharuskan menggunakan Write-Output
untuk menulis objek, seperti Write-Output
yang secara implisit dipanggil untuk Anda.
PS> Get-Service
akan sama dengan:
PS> Get-Service | Write-Output
Write-Output mengirimkan output ke pipeline. Dari sana dapat disalurkan ke cmdlet lain atau ditugaskan ke variabel. Write-Host mengirimkannya langsung ke konsol.
$a = 'Testing Write-OutPut' | Write-Output
$b = 'Testing Write-Host' | Write-Host
Get-Variable a,b
Keluaran:
Testing Write-Host
Name Value
---- -----
a Testing Write-OutPut
b
Jika Anda tidak memberi tahu Powershell apa yang harus dilakukan dengan output ke pipeline dengan menetapkannya ke variabel atau menyalurkannya ke perintah lain, maka itu akan dikirim ke out-default, yang biasanya adalah konsol sehingga hasil akhirnya muncul sama .
Write-Output
mengirimkan data sebagai objek melalui pipa. Dalam contoh Pertanyaan itu hanya akan melewatkan sebuah string.
write-host
tergantung pada host. Di konsol write-host
pada dasarnya melakukan [console]::WriteLine
. Lihat ini untuk info lebih lanjut.
Write-Ouput
mengirimkan benda. Kali ini adalah string, tetapi secara umum akan mengirim objek, dan biasanya tidak perlu digunakan karena ini adalah cara default untuk menampilkan hasil / data :)
Perbedaan lain antara Write-Host dan Write-Output:
Write-Host menampilkan pesan di layar, tetapi tidak menulisnya ke log
Write-Output menulis pesan ke log, tetapi tidak menampilkannya di layar.
Dan Write-Host dianggap berbahaya. Anda dapat melihat penjelasan rinci di Write-Host Dianggap Berbahaya .
Write-Output
menampilkan pesan di layar, jika Anda menjalankan skrip sendiri. Jadi saya tidak yakin apa yang Anda maksud dengan "Write-Output menulis pesan ke log, tetapi tidak menampilkannya di layar." ?
Anda dapat memahami perbedaan antara kedua cmds dengan contoh di bawah ini:
Write-host "msgtxt" | Get-Service Saat dijalankan di atas, Anda akan mendapatkan keluaran sebagai "msgtxt"
Output-tulis "msgtxt" | Get-Service Saat menjalankan di atas, Anda akan menerima error karena msgtxt bukanlah nama layanan apa pun. (Dalam kondisi ideal) (Karena Anda menulisnya ke pipeline dan dikirimkan sebagai input ke Get-Service)