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.