19Aug

Geek Okulu: Öğrenme Biçimlendirme, Filtreleme ve PowerShell'de Karşılaştırma

Geek School'un bu sürümünde, Boru Hattı'ndaki nesnelerin biçimlendirilmesine, filtrelenmesine ve karşılaştırılmasına bakıyoruz.

Serideki önceki makaleleri okuduğunuzdan emin olun:

  • Windows'u PowerShell ile Otomatikleştirme Nasıl
  • 'yi Öğrenin PowerShell'de Cmdlet'leri Öğrenmeyi Öğrenin
  • PowerShell'de Nesneleri Nasıl Kullanacağınızı Öğrenin

Ve serinin diğer bölümleri için bütün hafta boyunca durmaya devam edin.

Varsayılan Biçimlendirme

PowerShell ile ilk başladığımda her şeyin sihir olduğunu düşündüm, ama gerçek şu ki kaputun altında olan biteni anlamak biraz zaman alıyor. PowerShell biçimlendirme sistemi için de aynı durum geçerlidir. Aslında, Get-Service cmdlet'i çalıştırırsanız, üretilen çıktı yalnızca size 3 özellik gösterir: Durum, Adı ve GörünenAdı.

Ancak, Get-Service'u Get-Member'e yönlendirirseniz, ServiceController nesnelerinin yalnızca bu üç özelliğinden çok daha fazlasına sahip olduğunu görürsünüz, böylece neler oluyor?

Yanıt, yerleşik cmdlet'lerin çoğunun çıktılarını nasıl görüntüleyeceğini tanımlayan gizli bir dosya içeriyor. Bir anlayış elde etmek için, kabuğa aşağıdakileri yazın ve enter tuşuna basın.

notepad C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

Not Defteri Bul işlevini kullanırsak, ServiceController'ı aramak suretiyle Get-Service cmdlet'inin çıktısını ayrıntılarıyla belirtilen kısma geçebilirizyazın.

Aniden, kaputun altında PowerShell'in Hizmet Hattı'nda ServiceController türü olan ve üç sütunlu bir tablo oluşturan tüm nesneleri biçimlendirdiğini görebilirsiniz: Durum, Ad ve GörünenAd. Ancak, sizinle ilgilendiğiniz dosya, o dosyada bir girdi ya da bu konuda bir başka format dosyası yoksa?Öyleyse, aslında oldukça basittir. Boru hattından çıkan nesne 5 veya daha fazla özelliğe sahipse, PowerShell tüm nesnenin özelliklerini bir listede görüntüler;5'den az özelliği varsa, bunları bir tabloda görüntüler.

Verilerinizi Biçimlendirmek

Bir nesnenin veya türün varsayılan biçimlendirilmesinden memnun değilseniz, kendi biçimlendirmenizi döndürebilirsiniz. Bunu yapmak için bilmeniz gereken üç tane cmdlet vardır.

  • Format-Listesi
  • Biçim-Tablo
  • Biçim-Geniş

Biçim-Geniş basitçe nesnelerin bir koleksiyonunu alır ve her nesnenin tek bir mülkünü görüntüler. Varsayılan olarak, bir ad özelliği arar;Nesnelerinizde bir name özelliği bulunmuyorsa, özellikler alfabetik olarak sıralanmış olduktan sonra nesnenin ilk özelliklerini kullanacaktır.

Alma Hizmeti |Format-Wide

Gördüğünüz gibi, varsayılan olarak iki sütun bulunur, ancak kullanmak istediğiniz mülkü hem de kaç sütunun görüntülenmesini istediğinizi belirtebilirsiniz.

Almak |Biçim-Geniş - Özellik EkranAdı - Sütun 6

Bir şey varsayılan olarak bir tablo olarak biçimlendirilirse, Format-List cmdlet'i'ni kullanarak her zaman liste görünümüne geçebilirsiniz. Get-Process cmdlet'inin çıktısına bir göz atalım.

Bu tablo biçimi aslında bu tür bilgilere oldukça iyi uyuyor ancak bunu liste formunda görmek istiyoruz. Gerçekten yapmamız gereken tek şey, Format-List 'ye yönlendirmek.

Get-Prosesi |Format-List

Gördüğünüz gibi, varsayılan olarak listede yalnızca dört öğe görüntülenir. Nesnenin tüm özelliklerini görüntülemek için bir joker karakter kullanabilirsiniz.

Get-Prosesi |Format-List -Property *

Alternatif olarak, istediğiniz özellikleri de seçebilirsiniz.

Get-Prosesi |Format-Liste -Property name, id

Biçim-Tablosu, diğer taraftan veri alır ve tabloya dönüştürür. Get-Process'teki veriler zaten bir tablo biçiminde olduğu için tabloda görüntülenmesini istediğiniz özellikleri kolayca seçmek için kullanabiliriz. Tüm verileri tek bir ekranda sığdırmak için AutoSize parametresini kullandım.

Get-Prosesi |Format-Tablo adı, id -AutoSize

Filtreleme ve Karşılaştırma Nesne tabanlı bir pipeline'ı kullanma konusunda en iyi şeylerden biri, Where-Object cmdlet'i kullanarak herhangi bir aşamada nesneleri boru hattından çıkarabilmenizdir.

Alma Hizmeti |Where-Object{ $ _. Durum -eq "Çalışıyor"}

Nesnenin gerçekten çok basit olduğu yerde kullanın.$ _, filtrelemek istediğiniz bir özelliği seçebileceğiniz geçerli boru hattı nesnesini temsil eder. Burada, yalnızca Durum özelliği Running'e eşit olan nesneleri saklıyorlardı.Filtre komut dosyası bloğunda kullanabileceğiniz birkaç karşılaştırma operatörü vardır:

  • eq( Eşit)
  • neq( Eşit Değildir)
  • gt( Büyüktür)
  • ge( Büyük veya Daha Fazla)
  • lt( Daha Az)
  • le( Daha Az veya Eşit)
  • ( Wildcard String Match) gibi

Tam liste ve daha fazla bilgi about_comparison kavramsal yardım dosyasında görülebilir, ancak Where-Obeject sözdizimine alışmak biraz zaman alacaktır. Tüm bunlar bu sefer!