1. Ana Sayfa
  2. Microsoft PowerShell
  3. Windows Powershell – Select Object – Hash Table and Formatting – Bölüm 3

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

Windows – Select Object – Hash Table and Formatting. İ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.

Serinin tüm yazıları için aşağıdaki dört linki kullanabilirsiniz.

Windows PowerShell – Pipeline Nedir? – Bölüm 1

Windows Powershell – Sorting and Measuring (Sıralama ve Ölçme) – Bölüm 2

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

Microsoft Powershell – ConvertTo ve Export Komutları – Bölüm 4

Obje Kümesinin Seçilmesi

ç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.


Resim-1

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


Resim-2

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)


Resim-3

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.


Resim-4

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


Resim-5

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


Resim-6

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 olduğundan 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.


Resim-7

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.


Resim-8

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.


Resim-9

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

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

DMOC

 

TAGs : , powershell, , powershell komutlari, powershell nasıl kullanilir, , , ,

Yorum Yap

Yazar Hakkında

Sakarya doğumludur. İstanbul Üniversitesi’nde Matematik/Fen ve Teknoloji öğretmenliğini bitirmiştir. Yüksek lisansını Sakarya Üniversitesi Bilgisayar Mühendisliği’nde yapmıştır. Bilişim sektöründe çeşitli firmalarda sistem ve network sorumlusu olarak çalışmıştır. Bazı kurumlarda sistem ve network üzerine uzmanlık eğitimleri vermiştir. Şu anda Netaş şirketinde kurumsal danışman olarak görev yapmaktadır. Microsoft System Center ürünleri, Powershell ve Azure teknolojileri ile ilgilenmektedir. 2016 yılında Microsoft tarafından Cloud and Datacenter alanında MVP unvanını almıştır.

Yorum Yap

Yorumlar (3)