PowerShell'de konsola yazmanın en iyi yolu


142

Konsola yazdırmanın (yankı) çeşitli yolları hakkında biraz karışıklık yaşıyorum. Konsola çıktı yazmak için birden çok yol olduğunu gördüm, örneğin:

Write-Host "Hello world1"
"Hello World2"
Out-Host -InputObject "Hello World3"

Her üç yol da konsola yazdırılır. Ortadaki bir şekilde daha basit ve daha az ayrıntılı ve kullanımı daha kolaydır. Ayrıca şöyle bir işlev yazdığınızda:

function GetValues()
{
    "1"
    "2"
}

Hala boru hattında iki dize döndürür:

Ve hala değerleri yazdırabiliyorum:

foreach ($s in GetValues)
{
    Write-Host "s: " $s
}

Buldum şey sadece alıntı dize kullanarak her zaman özel ana bilgisayarlarda görünmüyordu ve ben özel ana bilgisayarlara yazdırmak için değerleri almak için Write-Host kullanmak zorunda oldu .

Bir şekilde bunu kafa karıştırıcı buluyorum. "Print something"Bir takma ad mı olmalı Write-Hostyoksa amaç nedir?

Yanıtlar:


101

PowerShell'in varsayılan davranışı, bir boru hattından düşen her şeyi başka bir boru hattı elemanı tarafından alınmadan veya bir değişkene (veya yeniden yönlendirilen) atanmadan boşaltmaktır Out-Host. Ne Out-Hostyapar açıkçası konak bağlıdır.

Sadece şeylerin boru hattından düşmesine izin vermek , sadece ana bilgisayar uygulamasında metin çıktısının nedeni için var olan bir alternatif değildirWrite-Host .

Çıktı istiyorsanız, Write-*cmdlet'leri kullanın . Bir işlevden değer döndürmek istiyorsanız, nesneleri herhangi bir cmdlet olmadan dökün.


1
Bunu .vbs komut dosyasında yazdım. Sadece bu kod satırı ve bana hata veriyor.
FrenkyB

58

Ortadaki boru hattına yazar. Write-Hostve Out-Hostkonsola yazar. 'echo', Write-Outputboru hattına da yazan bir diğer addır. Konsola yazmanın en iyi yolu Write-Hostcmdlet'i kullanmaktır .

Bir nesne boru hattına yazıldığında, zincirdeki diğer komutlar tarafından kullanılabilir. Örneğin:

"hello world" | Do-Something

ancak bu Write-Host, boru hattına değil, konsola yazdığı için çalışmaz (Do-Something dizeyi alamaz):

Write-Host "hello world" | Do-Something

3
Bu cevap teknik olarak doğrudur, ancak bir neophyte PowerShell kullanıcı sapmasına yol açtığından şüpheleniyorum. Etkili PowerShell'in ilk kuralı, boru hattında faydalı çıktılar üretmektir. Write-Host'u çok kullanıyorsanız, muhtemelen yanlış yapıyorsunuzdur.
OldFart

6
OP'nin sorduğu şey bu değil, konsola nasıl yazılır? Ana bilgisayara yazma ile boru hattına yazma arasında bir fark vardır ve her birinin ne yaptığını bilmesi gerekir. Cevabımı bir açıklama ile güncelleyeceğim.
Shay Levy
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.