PowerShell Yazma Çıkışı: Kolay Çıkış Arkadaşınız


Sıkıcı, öngörülebilir senaryo çıktılarına elveda deyin! PowerShell Yazma-Çıktı cmdlet'i ile PowerShell komut dosyalarınıza yaratıcılık ve kişilik dokunuşu ekleyebilirsiniz.

Write-Output cmdlet'i güçlü bir araçtır ve tüm otomasyon ve sistem yönetimi ihtiyaçlarınız için mükemmel bir yardımcıdır. Bu eğitimde Write-Output cmdlet'inin potansiyelini en üst düzeye çıkarmayı öğreneceksiniz.

Hazır? Okumaya devam edin ve Write-Output cmdlet'inin büyüsünü keşfedin!

Önkoşullar

Bu eğitim uygulamalı bir gösteri olacaktır. Devam etmek için PowerShell'in yüklü olduğu bir bilgisayarınız olduğundan emin olun (tercihen en son sürüm). Bu eğitimde PowerShell 7 yüklü Windows 10 kullanılmaktadır.

Nesneleri Konsola Çıkarma

PowerShell Write-Output cmdlet'i, nesneleri çıkış akışına yazar ve konsolda bir komutun veya mesajın çıkışını görüntüler. Ancak bu aracın çıktıyı nasıl daha anlamlı ve değerli hale getirdiğine şaşıracaksınız.

Çıktıyı konsolda görüntülemek yerine çıktıyı özelleştirmek için Write-Output cmdlet'ini kullanın. Write-Output cmdlet'i dizeler, tamsayılar, diziler ve hatta karmaşık nesneler gibi herhangi bir nesnenin veya veri türünün çıktısını alabilir.

Konsola bir Merhaba Dünya! mesajı göndermek için aşağıdaki komutu çalıştırın.

Write-Output "Hello, World!”

Aşağıda Write-Output cmdlet'inin en temel işlevini görebilirsiniz. Ancak bu cmdlet'in orta ila ileri düzey kullanımını öğrenmek için okumaya devam edin.<>

Nesneleri Başka Bir Komuta Aktarmak

Çıktıyı konsolda görüntülemenin yanı sıra, nesneyi daha ileri işlemler için başka bir komuta göndermek için Write-Output komutunu kullanabilirsiniz. Nasıl? İşlem hattı operatörünü (|) kullanarak. Ardışık düzen, Yazma-Çıktı'yı otomasyon ve sistem yönetimi görevleri için kullanışlı ve çok yönlü bir komut haline getirir.

CPU gibi kaynaklarınızın çoğunu hangi sürecin tükettiğini görmek istediğinizi varsayalım.

Aşağıdakileri gerçekleştirmek için aşağıdaki komutları çalıştırın:

  • Sisteminizde çalışan tüm işlemlerin (Get-Process) listesini alın.
  • Listeyi işlem hattına gönderin ve bu işlem hattı daha sonra Sort-Object komutuna aktarılır. Boru hattı operatörü, birden fazla komutu birbirine zincirlemenize ve bir komutun çıktısını diğerinin girdisi olarak işlemenize olanak tanır.
  • İşlemlerin listesini (Sort-Object) CPU kullanımına göre -Azalan sırasına göre sıralayın.
$processes = Get-Process
Write-Output $processes | Sort-Object CPU -Descending

Bu eğitimdeki komutlardan herhangi birini bir PowerShell betiğine yerleştirip çalıştırabileceğinizi unutmayın.

Sıralanan liste aşağıda gösterildiği gibi konsolda görüntülenir.

Nesnelerin Özel Formatla Çıktısını Alma

Write-Output cmdlet'inin düzgün çalışan temel çıktı formatını gördünüz. Ancak isterseniz kişisel bir dokunuş eklemek için nesnelerin çıktısını özel bir formatta da alabilirsiniz. Belirli nesne özelliklerini görüntülemek veya çıktının görünümünü özelleştirmek istediğinizde özel bir format yararlı olabilir.

Özel bir formatta bir nesnenin çıktısını almak için, Format-Custom ile Write-Output cmdlet'i aşağıdaki gibi iş görecektir:

özel çıktı biçimini oluşturmak ve ardından Format-Custom cmdlet'inin çıktısını Write-Output'a yönlendirmek için.<>

Çıktı oluşturmayan ancak çıktıya karşılık gelen değerlere sahip üç özellik içeren bir nesne (karma tablosu) oluşturan aşağıdaki komutu çalıştırın.

$object = [pscustomobject]@{
Property1 = "Value1"
Property2 = "Value2"
Property3 = "Value3"
}

Şimdi aşağıdakileri gerçekleştirmek için aşağıdaki komutu çalıştırın:

  • Hashtable'ınızın ($object) çıktısı (Write-Output) için özel bir format (Format-Table) oluşturun. Property1, Property2 ve Property3 özellikleri sütun olarak ayarlanır.
  • Sütun genişliklerini (-AutoSize) içeriğe uyacak şekilde ayarlayın.
$object | Format-Table -Property Property1, Property2, Property3 -AutoSize | Write-Output

Alternatif olarak, nesnenin çıktısını özellik-değer çiftlerinin bir listesi olarak çıkarmak için Format-List cmdlet'ini Write-Output ile birlikte kullanabilirsiniz.

$object | Format-List -Property Property1, Property2, Property3 | Write-Output

Bir Koleksiyon Nesnesini Tek Varlık Olarak Aktarmak

Varsayılan olarak, Yazma-Çıktı her toplama öğesini ardışık düzen aracılığıyla ayrı ayrı gönderir; bu işleme numaralandırma adı verilir. Ancak -NoEnumerate parametresini ekleyerek koleksiyon nesnesinin tamamını tek bir varlık olarak geçirerek bu davranışı önleyebilirsiniz.

-NoEnumerate parametresinin nasıl çalıştığını görmek için şu adımları izleyin:

Aşağıdakileri gerçekleştirmek için aşağıdaki komutları çalıştırın:

  • Birden üçe kadar bir $numbers dizisi bildirin (1,2,3).
  • İşlem hattından geçen nesnelerin (Measure-Object) sayısını sayın.
  • Nesne ölçümünün çıktısını alın (Yazma-Çıkış $sayıları).

NoEnumerate parametresi olmadan, Measure-Object, $numbers3) döndürür. dizisi numaralandırıldı ve işlem hattından tek tek aktarıldı.

# Declares an Array
$numbers = 1,2,3
# Outputs the object count passed through the pipeline
Write-Output $numbers | Measure-Object

Şimdi, boru hattından geçen nesnelerin sayısının çıktısını almak için aşağıdaki komutları çalıştırın.

Ancak -NoEnumerate parametresini eklediğiniz için Measure-Object cmdlet'i nesneyi tek bir varlık olarak ele alır ve bir sayısını (1) döndürür. ).

# Declares an Array
$numbers = 1,2,3
# Outputs the object count as a single entity passed through the pipeline
Write-Output -NoEnumerate $numbers | Measure-Object

Write-Output komutunu parantez içine almak (yani, (Write-Output 1,2,3)), 'den bağımsız olarak numaralandırmanın gerçekleşmesini zorlayacaktır. -NoEnumerate parametresi.

Menü Sistemi ve Giriş İstemleri Oluşturma

Write-Output cmdlet'inin bir diğer mükemmel kullanımı, kullanıcıdan giriş yapmasını isteyen bir PowerShell betiği içeren bir menü sistemi oluşturmaktır.

Tercih ettiğiniz metin/kod düzenleyiciyle bir .ps1 dosyası oluşturun, aşağıdaki kodu girin ve dosyayı kaydedin. Dosyayı istediğiniz gibi adlandırabilirsiniz ancak bu eğitimin tercihi myoutput.ps1 olacaktır.

Aşağıdaki kod, kullanıcı Çıkış seçeneğini seçene kadar sürekli olarak kullanıcıdan seçenekler listesinden bir seçenek seçmesini isteyen bir döngü kullanır.

# Initialize the $exit variable to $false
$exit = $false

# Start a loop that will run until the user selects the "Exit" option
while (!$exit) {

  # Display a list of options to the user
  Write-Output "Please select from the following options:"
  Write-Output "1. Option 1"
  Write-Output "2. Option 2"
  Write-Output "3. Option 3"
  Write-Output "4. Exit"

  # Prompt the user for a selection
  $selection = Read-Host

  # Use a switch statement to execute different codes based on the user's selection
  switch ($selection) {
    1 {
      # If the user selects option 1, display a message and do something for option 1
      Write-Output "You selected Option 1."
      # Do something for option 1
    }
    2 {
      # If the user selects option 2, display a message and do something for option 2
      Write-Output "You selected Option 2."
      # Do something for option 2
    }
    3 {
      # If the user selects option 3, display a message and do something for option 3
      Write-Output "You selected Option 3."
      # Do something for option 3
    }
    4 {
      # If the user selects option 4, set $exit to $true to exit the loop
      $exit = $true
    }
  }
}

Şimdi betiği (myoutput.ps1) çalışma dizininden çalıştırın.

./myoutput.ps1

Aşağıda gösterildiği gibi, 1, 2 veya 3 seçeneğini belirlediğinizde seçiminizle ilişkili mesaj görüntülenir. Ancak 4 seçeneğini belirlediğinizde komut dosyası sonlandırılır.

Açılış Ekranı veya Hoş Geldiniz Mesajı Görüntüleme

Yazma-Çıktı ile kullanıcıların seçebileceği seçeneklerin listelenmesinin yanı sıra, bir açılış ekranı veya hoş geldiniz mesajı da görüntüleyebilirsiniz. Süslü açılış ekranları senaryonuz üzerinde iyi bir izlenim (profesyonel ve gösterişli) bırakır.

myoutput.ps1 dosyanızdaki kodu, komut dosyanızı çalıştırdığınızda bir açılış ekranı (hoş geldiniz mesajı başlığı) görüntüleyen aşağıdaki kodla değiştirin.

Başlığın metnini ve biçimini değiştirerek açılış ekranını özelleştirebilirsiniz. Açılış ekranına istediğiniz gibi logo veya metin gibi ek öğeler ekleyebilirsiniz.

# Clear the screen
Clear-Host

# Display the splash screen using Write-Output
Write-Output "##############################################"
Write-Output "#                                            #"
Write-Output "#   Welcome to the SuperScript 3000!         #"
Write-Output "#                                            #"
Write-Output "##############################################"

Şimdi betiği çalıştırın ve açılış ekranınızın nasıl göründüğüne bakın.

./myoutput.ps1

İlerleme Çubuğunun Görüntülenmesi

Komut dosyalarını çalıştırırken bir ilerleme göstergesi, kullanıcının komut dosyasının çalışıp çalışmadığına ilişkin endişesini ortadan kaldırır. İlerleme çubukları, uzun süredir devam eden bir komut dosyasının veya işlemin ilerlemesini kullanıcıya göstermek için yararlı olabilir. Neyse ki, Write-Output cmdlet'iyle beğeninize göre bir ilerleme çubuğu oluşturabilirsiniz.

myoutput.ps1 dosyanızı açın ve aşağıdaki kodu, komut dosyasındaki mevcut kodun altına ekleyin.

Aşağıdaki kod, birkaç adımı yinelemek için bir while döngüsü kullanır. Bu örnekte 100 adım. Döngünün her yinelemesi, tamamlanan adımların yüzdesini hesaplar ve Write-Output'u kullanarak bir ilerleme çubuğu görüntüler.

İlerleme çubuğu aşağıdaki operatörlerin birleşimi kullanılarak oluşturulur:

  • * - Bir dizeyi belirtilen sayıda tekrarlar
  • $() - Bir ifadenin çıktısının bir dizeye dahil edilmesine izin verir.

Komut dosyası daha sonra bir sonraki adıma geçmeden önce ilerlemeyi simüle etmek için 1 saniye duraklar (Başlatma-Uyku).

# Set the total number of steps for the progress bar
$steps = 100

# Initialize the counter for the current step
$currentStep = 0

# Start a loop that will run for the number of steps
while ($currentStep -lt $steps) {
  # Increment the current step counter
  $currentStep++

  # Calculate the percentage of steps completed
  $percentComplete = [int] ($currentStep / $steps * 100)

  # Display a progress bar using Write-Output
  Write-Output "Progress: [$("=" * $percentComplete)$(" " * ($steps-$percentComplete))] $percentComplete% complete"

  # Pause for 1 second to simulate the progress
  Start-Sleep -Seconds 1
}

Şimdi betiği çalıştırın ve ilerleme çubuğunun nasıl çalıştığını görün.

./myoutput.ps1

Aşağıda, ilerleme çubuğuyla birlikte açılış ekranını görebilirsiniz.

Çözüm

Bu eğitimde Yazma-Çıktı'ın nesnelerin, veri türlerinin ve özel biçimlerin çıktısını nasıl kolayca alabildiğini gördünüz. Ayrıca, daha sonraki işlemler için çıktıyı diğer komutlara göndermek amacıyla boru hattı operatörünü kullanmaya değindiniz.

İster basit bir mesaj çıkışı ister karmaşık otomasyon görevleri yazıyor olun, Write-Output, daha bilgilendirici ve profesyonel PowerShell komut dosyaları oluşturmak için vazgeçilmez bir araçtır.

Bu yeni keşfedilen bilgiyle neden çıktılarınızı .txt ve .xml dosyaları gibi farklı dosya türlerine yazmıyorsunuz? Amaç ne olursa olsun, çıktı kopyaları sisteminiz veya uygulamalarınızla ilgili sorunların giderilmesinde kullanışlıdır. Write-Output ve Out-File cmdlet'i size ihtiyaç duyduğunuzu hiç bilmediğiniz gücü sağlar.

İlgili makaleler