Yazma Ana Bilgisayarı ve Yazma Çıkışı arasındaki PowerShell farkı?


Yanıtlar:


82

Özetle, Write-Hostkonsolun kendisine yazar. VBScript'te bir MsgBox olarak düşünün . Write-Output, öte yandan, ardışık düzene yazar, böylece bir sonraki komut onu girdi olarak kabul edebilir. Örtük olarak size çağrıldığı Write-Outputgibi Write-Output, nesne yazmak için kullanmanız gerekmez .

PS> Get-Service

şununla aynı olacaktır:

PS> Get-Service | Write-Output

16
Powershell bu şekilde çok kafa karıştırıcı. Powershell'de belirtilen ardışık düzen ve değerlerin bir işlevden nasıl döndürüldüğünü anlamak için bu bağlantıyı okumaya değer. "PowerShell'deki dönüş anahtar sözcüğü yanıltıcı - dürüst olmak gerekirse, bundan kaçınıyorum çünkü çoğu programlama dili gibi hiç çalışmıyor." - powershell.org/forums/topic/…
Jim Aho

1
Dönüş değeri olan bir işlevi çağırıyorsanız, o işlevde Yazma Çıkışı KULLANMAYIN, aksi takdirde dönüş değeriniz yerine bu dize döndürülür. Her türlü kargaşaya neden olabilir.
Brain2000

29

Yazma Çıkışı, çıktıyı boru hattına gönderir. Oradan başka bir cmdlet'e aktarılabilir veya bir değişkene atanabilir. Write-Host, bunu doğrudan konsola gönderir.

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

Get-Variable a,b

Çıktılar:

Testing Write-Host

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

Powershell'e bir değişkene atayarak ya da anoher komutuna borulayarak ardışık düzendeki çıktıyla ne yapacağını söylemezseniz, varsayılana gönderilir, bu normalde konsoldur, böylece sonuç aynı görünür. .


9

Write-Outputverileri ardışık düzen aracılığıyla bir nesne olarak gönderir. Sorular örneğinde sadece bir dizge geçecektir.

write-hostana bilgisayara bağlıdır. Konsolda write-hostaslında yapıyor [console]::WriteLine. Bkz bu daha fazla bilgi için.


4
Sadece gelecekteki okuyucular için açıklığa kavuşturmak için. Write-Ouputnesneler gönderir. Bu kez bir dize, ama genel olarak bu nesneleri gönderecek ve o :) çıkış sonuçları / verilere varsayılan yöntemdir olarak kullanmak normalde gereksizdir
Frode F.

5

Yazma Ana Bilgisayarı ve Yazma Çıkışı arasındaki diğer bir fark:

  • Write-Host, mesajı ekranda görüntüler ancak günlüğe yazmaz

  • Yazma Çıkışı, günlüğe bir mesaj yazar, ancak bunu ekranda göstermez.

Ve Write-Host, zararlı olarak kabul edilir. Yazma Ana Bilgisayarı Zararlı Olarak Kabul Edildi bölümünde ayrıntılı bir açıklama görebilirsiniz .


2
Yazma Çıktısını çok daha zararlı buluyorum. Bir işlevin bir komuttan beklenmedik bir çöp çıktısı değil de gerçekten beklenen sonucunuzu döndürdüğünden nasıl emin oluyorsunuz?
MKesper

6
Write-OutputKomut dosyasını kendiniz çalıştırıyorsanız, bence ekranda mesaj görüntülenir. Bu nedenle, "Yazma-Çıkışı günlüğe bir mesaj yazar, ancak ekranda göstermez" ile ne demek istediğinizden emin değilim. ?
Jim Aho

Çıktıyı bir değişkene yakaladığınız bir işlevin içinde kullanılıyorsa ekrana Yazma-Çıktı dönüş bilgisine sahip olamazsınız. Hatta çıktıyı mahvedebilir. Write-Host, bunun için daha uygundur.
galmok

@Yaz Yazma Çıktısı zararlıdır, Yazma Bilgileri harika. Yazma Çıktısı, dönüş değerlerine sahip Powershell işlevlerinin düşmanıdır.
Brain2000

Dokümanlara göre , "Windows PowerShell 5.0'dan başlayarak, Write-Host, Write-Information için bir sarmalayıcıdır. Bu, bilgi akışına çıktı yaymak için Write-Host'u kullanmanıza olanak tanır."
Phistrom

0

İki cmd arasındaki farkı aşağıdaki örnekle anlayabilirsiniz:

Ana bilgisayara "msgtxt" yazma | Get-Service Yukarıda çalıştırıldığında, "msgtxt" olarak çıktı alacaksınız.

Yazma-çıkışı "msgtxt" | Get-Service Yukarıda çalıştırıldığında, msgtxt herhangi bir hizmetin adı olmadığı için bir hata alırsınız. (İdeal durumda) (Bunu bir ardışık düzene yazdığınız ve Get-Service'e girdi olarak geçirildiği için)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.