Windows Powershell – Bölüm 3 – Select Object – Hash Table and Formatting

By | 11 December 2016

İlk bölümde pipeline mimarisinden bahsedip ikinci bölümde objelerin sıralanmasını anlatmıştım. Bu bölümde de obje kümesinin seçilmesi ile devam edelim.

İlk bölümde pipeline mimarisinden bahsedip ikinci bölümde objelerin sıralanmasını anlatmıştım. Bu bölümde de obje kümesinin seçilmesi ile devam edelim.

İlk iki makaleye aşağıdaki linkleri kullanarak ulaşabilirsiniz.

Bölüm 1 – Pipeline Nedir?

Bölüm 2 – Sorting and Measuring

Obje Kümesinin Seçilmesi

Powershell komutları çalıştırıldığında default olarak belli miktarda attribute’u çıktı olarak verir. Bazen bu çıktılarda bulunan objelerin belli bir bölümü listelenmek istenebilir.

Örnek olarak powershell komutu ile event log’lar listelendiğinde sadece yeni olan eventler listelenmek istenilebilir. Bu durumda yapılması gereken Select-Object komutunu kullanmaktır. Kısaltılmış hali ile Select olarak da kullanılabilir.

Select-Object komutu ile belirli bir collection’daki belirli bir obje elde edilmez. Sadece collection’ın başı ve sonu arasındaki belli sayıda satır elde edilebilir.

Aşağıdaki parametreler kullanılarak Collection içerisindeki belli sayıda satırlar başlangıç ve bitiş arasında listelenebilir.

–          First

–          Last

–          Skip

 

Örneğin düşük virtual memory kullanan ilk 5 process aşağıdaki gibi listelenebilir.

image001

İsme göre sıralanmış çalışan servislerden son 5’i aşağıdaki gibi listelenebilir.

image002

 

CPU kullanımı en az olan 5 process , en düşük olan es geçilerek listelenebilir. (Aşağıdaki şekilde ilk olarak –skip parametresi kullanılmadan gelen değerler ve sonrasında kullanıldığında gelen değerler gösterilmiştir)

image003

 

Objeye ait Property’lerin Seçilmesi

Select-Object komutu ile objelere ait belirli property’ler seçilip görüntülenebilir. Komut çıktısı bir tablo olarak düşünülürse bu tabloya ait kolonlar select komutu ile belirlenebilir.

Select –Object komutu ile belirli property’ler seçildikten sonra diğer property’ler çıktı üzerinden temizlenir. Sadece Select ile seçilen property’ler gösterilir.

Burada dikkat edilecek nokta property isimlerinin düzgün kullanılmasıdır. Çünkü her zaman property isimleri default komut çıktısındaki ile aynı olmaz.

Örneğin Get-Process komutunu çalıştırdığınızda CPU parametresi çıktıda CPU(s) olarak yazılmıştır. Ama gerçek property ismi CPU’dur.

Property’lerin gerçek isimleri Get-Member komutu ile öğrenilebilir.

Get-Service komutuna ait çıktının sadece Status ve Name property’lerini içermesi aşağıdaki şekilde sağlanabilir.

image004

 

Komut -First ve -Last parametreleri ile birleştirilerek aşağıdaki gibi kullanılabilir.

image005

 

Calculated Property’ler Oluşturma

Bazen builtin olarak gelen property’ler istenilen isim ve değere sahip olmayabilir. Bu durumda yapılması gereke işlem calculated property oluşturmaktır.

Select-Object komutu aynı zamanda custom yada calculated property’ler de oluşturur.

Her bir calculated property builtin olarak gelen property’ler gibi label ve name’e sahiptir.

Her calculated property, property içeriğini tanımlayan expression’a sahiptir ve her calculated property hash table içerisinde tanımlanır.

 

Önce hash table’ı genel anlamı ile açıklayıp sonrasında calculated property ile devam edelim.

Hash  Table

Hash table bir çok programlama dilinde kullanılan bir yapıdır. Bu yapı programlama dillerinde kullanılan dictionary’ler ile benzerdir.

Bir hash table bir çok item’ı barındırabilir ve her item key ve value’dan meydana gelir. Hash table’lar windows powershell mimarisinde bir çok şekilde kullanılabilir.

Bazı durumlarda custom key’ler oluşturulabilir. Select-Object kullanılarak calculated property oluşturmada hash table kullanıldığı zaman  key’leri windows powershell’e uygun olarak kullanmak gerekir.

Örneğin label,l,name ve n kelime ve harfleri label’ları belirtmek için kullanılır. Ancak bazı fontlarda küçük L 1’e denk geldiği için sıkıntı oluşturabilir. Bu yüzden name,n ve label kelime ve harflerinin kullanılması önerilir. Aynı şekilde expression veya e calculated property’nin expression’ını belirlemek için kullanılır.

Örneğin  process’ler name,ID,virtual memory ve paged memory attribute’larına göre listelenmek istensin. Fakat son iki property isimleri VirtualMemory ve PagedMemory olarak yeniden isimlendirilsin ve bu property’lere ait değerler byte olarak listelensin istenilebilir.

Bu durumda yazılacak komut aşağıdaki gibidir.

Get-Process | Select-Object Name,ID, @{ n=’VirtualMemory’;e={$PSItem.VM}} , @{ n=’PagedMemory’;e={$PSItem.PM}} -First 10

image006

Komutta kullanılan $PSITEM pipe’tan önceki get-process komutu ile elde edilen her bir objeyi ifade eder.

Get-process ile elde edilen objelerin her biri listelenirken  $PSItem kullanılarak select-object ile belirtilen listeleme kriterleri her bir objeye uygulanır.

Not: Daha önceki versiyonlarda kullanılan $_ simgesi $PSItem ile aynı işlevi görür. Bu yazım şekli windows powershell 3.0 ve sonrası versiyonlar ile uyumluluk için uygundur.

Yukarıdaki komutta iki adet hash table iki farklı property için kullanılmıştır. Hash table’lar tek bir satırda yazıldığında anlaşılır olmayabilir. Bu sebeple aşağıdaki gibi bir yazım kullanılırsa anlamak daha kolay olacaktır.

@{

n=’VirtualMemory’;

e={ $PSItem.VM }

}

Hash table’larda n harfi ile belirtilen label sadece string bir değerdir. e harfi ile belirtilen Expression ise basit bir script bloğu oldugundan süslü parantez ile kullanılır.

Formatting

Yukarıdaki komut örnek olarak alındığında virtual memory ve paged memory değerlerinin byte cinsinde olduğu görülür. Bazen bu büyük değerlerin daha anlaşılabilir değerler olması istenebilir. Bu amaçla bu değerleri KB,MB,GB,TB ve PB’a dönüştürmek gerekir.

Bu amaçla yukarıdaki komut modifiye edildiğinde çıktı aşağıdaki gibi olur.

 

image007

 

1MB değeri kullanıldığında byte olan değerler 1MB’a bölünür. Kısmen de olsa virgüllü, byte değerine nazaran anlaşılır bir sonuç ortaya çıkar.

Bu yine de istenilen özet bir değer değildir. Bu sebeple komutu aşağıdaki bileşenlerle revize etmek gerekir.

‘{0:N2}’ –f ($PSItem.VM / 1MB)

Yukarıdaki komuta eklenen iki adet bileşen özet olarak şu işe yararlar;

  • -f formatlama operatörüdür.
  • {0:N2} operatörü ise ilk data öğesinin virgülden sonra iki sayı gösterecek sayı olarak konfigüre eder.

Yani biraz daha açıklayacak olursak ilk 0 index numarasıdır. N harfi Numeric anlamına gelir. N harfinin yanındaki sıfır ise virgülden sonra kaç nümerik değer olacağını belirler.

Daha ayrıntılı bilgi için aşağıdaki link oldukça faydalı olacaktır.

https://technet.microsoft.com/en-us/library/ee692795.aspx

Komut bu değerler ile tekrar çalıştırıldığında çıktı aşağıdaki gibidir.

image008

Görüldüğü gibi byte değerleri MB’a çevrilmiş ve virgülden sonra iki adet sayı görünmektedir.

Eğer çıktıda herhangi bir decimal değer olması istenmezse, format operatörü {0:N0} şeklinde kullanılmalıdır. Bu şekilde kullanıldığında örnek çıktı aşağıdaki gibidir.

image009

 

Bir sonraki makalede görüşmek üzere.

Kaynak: Microsoft DMOC

Kaynak 2: https://technet.microsoft.com/en-us/library/ee692795.aspx

Fırat

Leave a Reply