PowerShell Yazma Ana Bilgisayarı Cmdlet'ini Anlama


Yıllar boyunca PowerShell Write-Host cmdlet'i etrafında, onu kullanmanız gerekip gerekmediği konusunda pek çok tartışma yaşandı. Çoğu durumda olduğu gibi, cevap belki de ihtiyaçlarınıza bağlıdır.

Write-Host'u ve ne zaman kullanılacağını anlamak için Write-Host'un geçmişini hızlıca inceleyelim ve bu kullanışlı cmdlet'i en iyi şekilde nasıl kullanabileceğimizi öğrenelim.

PowerShell Write-Host'un Modern Kullanımı

Genellikle bir komut dosyasında veya PowerShell işlevinde, olup bitenler hakkında bilgi amaçlı olan ve bir işlevin çıktısıyla doğrudan ilgili olmayan bilgileri kullanıcıya dönüştürmeniz gerekir.

Neden Write-Host'un modern kullanımı diyoruz? PowerShell 5.x'ten önce Write-Host akışa (başarı, hata veya uyarı akışları gibi) bağlı değildi. Bu nedenle, diğer çıktı türleri kadar kontrol edilebilir olmadığından kullanımı önerilmemektedir.

Kullanıcıya bir betiğin işlenmesinin ne kadar süreceği hakkında bilgi veren bu basit betik örneğini ele alalım.

Write-Host "Starting the gathering of information, be patient, this could take a while!"
Write-Host "- Gathering Process`r`n- Gathering Files`r`n- Gathering Users"
Write-Output "Display the information here..."
Write-Host "Information Gathering Complete!"

Bunun, komut dosyanızın son kullanıcısının daha fazla karar vermek için kullanabileceği bilgileri ana bilgisayara aktardığını fark edeceksiniz. Kendinizi boru hattı içeriği hakkında sorular sorarken bulabilirsiniz.

Bir cmdlet'ten veya işlevden diğerine nesneler gönderiyor ancak yine de bilgilendirici iletileri görüntülemek istiyorsanız, bunu yapabilir misiniz? Neyse ki PowerShell'in Write-Host cmdlet'i ardışık düzen çıktısını etkilemez! Aşağıda bunun nasıl çalıştığını gösterelim.

Function Get-Information {
  Write-Host "Starting the gathering of information, be patient, this could take a while!`r`n"
  Write-Host "- Gathering Data`r`n- Returning Data`r`n"

  [PSCustomObject]@{
    "Test1" = "Value1"
    "Test2" = "Value2"
  }

  Write-Host "Information Gathering Complete!"
}

Function Convert-Information {
  Param(
    [Parameter(ValueFromPipeline=$true)]$Param
  )

  $Param | ConvertTo-JSON
}

Get-Information çıktısını Convert-Information'a yönlendirirseniz, ifadelerin hiçbirini dikkate almaz ve yalnızca PSCustomObject üzerinde çalışır. > bu çıktıdır.

Okunabilirlik için Mesajları Biçimlendirme

Write-Host'un çok kullanışlı bir başka yönü de renkleri ve çıktıyı biçimlendirme yeteneğidir. Bu, daha kolay okunabilirlik için kullanılabildiğinden, PowerShell betiği kullanıcılarının neler olduğunu ve ne zaman eylem yapılması gerekebileceğini anlamalarına büyük ölçüde yardımcı olabilir.

  • -ForegroundColor - Bilgi metninin rengi.
  • -BackgroundColor - Metnin arkasındaki arka planın rengi.
  • -Ayırıcı - Write-Host çıktısı alınan nesneler için boşluk yerine sağlanan ayırıcıyı kullanın. Bu bir satır başı ve "rn" gibi yeni satır karakteri olabilir.
  • -NoNewLine - Çıktının sonunda yeni satır karakteri çıktısı vermeyin.

Çeşitli biçimlendirme parametrelerinden yararlanarak nasıl yararlı bir bilgi mesajı oluşturabileceğimizi keşfedelim. Aşağıdaki kodda bir diziye ait sonuç sayısı hakkında bilgilendirici bir mesaj oluşturuyoruz ve daha kolay görüntülenmesini sağlayacak formatlama uyguluyoruz.

Aşağıda görüldüğü gibi görüntülenmek üzere Write-Host'a birden fazla nesne aktarılabilir. Genellikle bir komut dosyası oluşturucu bu iletileri bir boşlukla ayırır, ancak separator parametresiyle bunların konsola nasıl aktarılacağını kontrol edebilirsiniz.

$Array = @(1,2,3,4,5)

Write-Host "Results Count:" -BackgroundColor DarkBlue -ForegroundColor White -NoNewline
Write-Host "" $Array.Count "Items`r`n" -ForegroundColor Red
Write-Host $Array -Separator "`r`n"
Write-Host "" "End of results." -ForegroundColor Green -Separator "`r`n"

Çıktıyı renklerle, satırsonu ve ayırıcı çıktısıyla kontrol ederek kullanıcıya komut dosyası hakkında bilgi verecek faydalı bir mesaj oluşturabiliriz. Bu senaryonun bir örneği, diğer kullanım durumlarının yanı sıra bir bilgi menüsü oluşturmanızdır.

Write-Host Akış Çıkışını Yönlendirme

Write-Host artık akış çıkışı tarafından kontrol edilebildiğinden, çıkışı kontrol etmenin ve yönlendirmenin birkaç yolu vardır. InformationAction tercihi, Write-Host mesajlarında kısmen dikkate alınır. -InformationAction Ignore, Write-Host mesajlarını etkili bir şekilde bastırır, ancak $InformationPreference ve InformationAction parametresi, Write-Host cmdlet'i.

Write-Host'un yalnızca Write-Information cmdlet'inin etrafındaki bir sarmalayıcı olduğunu biliyor muydunuz? Bu, Write-Host çıktısının bilgi akışı içinde yer almasını sağlar. Bu, bilgi akışını kullanarak Write-Host mesajlarının nereye gideceğini değiştirebileceğiniz anlamına gelir.

Bununla birlikte, yeniden yönlendirme operatörlerini kullanarak Write-Host mesajlarının çıktısını yine de farklı bir akışa yönlendirebilirsiniz. Örneğin, tüm Write-Host mesajlarının çıktısını bir günlük dosyasına alın. Yukarıda görüldüğü gibi aynı örneği alarak, tüm bu çıktıyı bir günlük dosyasına yönlendirelim.

Write-Host "Results Count:" -BackgroundColor DarkBlue -ForegroundColor White -NoNewline 6>> .\log.txt
Write-Host "" $Array.Count "Items`r`n" -ForegroundColor Red 6>> .\log.txt
Write-Host $Array -Separator "`r`n" 6>> .\log.txt
Write-Host "" "End of results." -ForegroundColor Green -Separator "`r`n" 6>> .\log.txt

Gördüğünüz gibi PowerShell artık çıktıyı bir günlüğe yönlendiriyor ancak biçimlendirme tam olarak istediğiniz gibi olmayabilir. Bunun nedeni, -NoNewLine parametresinin çoğunlukla bir ana bilgisayar biçimlendirme aracı olması nedeniyle pek dikkate alınmamasıdır. Bu çok önemli olmayabilir ancak akış çıktısını yeniden yönlendirirken akılda tutulması gereken bir şeydir.

Çözüm

PowerShell 5.x ve sonraki sürümlerdeki değişikliklerle birlikte Write-Host'un kullanımına mükemmel bir şekilde izin veriliyor ve kullanıcıya bilgi mesajları görüntülemeniz gerektiğinde teşvik ediliyor. Bir PowerShell kullanıcısı, çıktı veya ayrıntılı mesajla aynı olan bilgilendirici bir mesaj üzerinde gerekli düzeyde kontrole sahip olacağından, Yazma Ana Bilgisayarı veya Yazma Bilgileri kullanımı teşvik edilir. ve gerektiğinde kullanılması tavsiye edilir.

İlgili makaleler