Powershell komutlarına cmdlet deniyor. Bir fiil ve ismin tire işareti ile birleşiminden oluşuyorlar. Örneğin çalışan süreçlerin listesini almak için kullanılacak komut (cmdlet):
Get-ProcessAma her seferinde bu kadar uzun komutlar girmemek için kısaltma amaçlı "alias"lar eklenmiş. Her seferinde Get-Process yazmak elbette mümkün, ama kısaltmak isterseniz
gpsveya
psde aynı işi yapıyor. Bu alias elbette linuxtaki eşdeğeri ps komutundan geliyor. Ama linux eşdeğerinden farklı olarak tamamen nesne yönelimli (object oriented). Tüm çalışan süreçlerin listesini değil de sadece svc ile başlayan süreçlerin listesini görmek istersek yapılacak
ps svc*yazmak. Bunun sonucunda aşağıdaki gibi bir çıktı üretecek:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
844 30 19016 21172 90 232 svchost
1005 37 112316 114080 190 396 svchost
2163 71 72416 72612 349 412 svchost
652 34 12444 20520 145 452 svchost
527 19 8504 14744 82 756 svchost
547 18 6752 10376 71 796 svchost
1250 183 24952 28980 1309 1240 svchost
325 19 3396 8688 54 1508 svchost
489 38 27524 28188 116 1532 svchost
108 10 3316 3040 42 1844 svchost
55 6 712 1224 21 2036 svchost
369 17 5584 10000 91 2044 svchost
53 6 712 1280 21 2088 svchost
100 8 1312 2224 24 2136 svchost
165 14 4176 5092 48 2568 svchost
145 11 2148 5920 43 5968 svchost
Buradaki sütünların açıklamaları [1] ve [2] de var.
Örneğin handle sayısı 1000'den fazla olan ve svc ile başlayan süreçleri listelemek için
ps svc* | ? {$_.Handles -gt 1000}
yazmak yeterli. Bu komutun kısaltılmış hali. Uzun uzun alias kullanmadan yazmak istersek komut şöyle olurdu:
Get-Process -Process svc* | Where-Object {$_.Handles -gt 1000}Soru işareti (?) Where-Object cmdlet'inin bir alias'ı. Get-Process cmdlet'inin varsayılan parametresi de Process olduğu için ayrıca -Process yazmaya gerek yok. Önemli olan kısmı boru karakterinden (|) sonrası. Komut satırında olduğu gibi burada da boru karakteri bir komutun çıktısını diğer komuta giriş olarak veriyor. svc ile başlayan süreçlerlerin listesini al, Where-Object komuduna ver. O da bunları bir döngüye soksun (küme parantezleri sanal bir for döngüsü gibi), sadece Handles değeri 1000'den büyük olanları çıkış olarak üretsin. Burada $_ sanal for döngüsündeki döngü değişkeninin yerine geçiyor. Döngünün her adımında nesnenin Handles özelliğini alıp -gt ile "büyüktür" (greater than) işlemine tabi tutuyor. Sonucunda da şu çıkıyor:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
1008 38 114932 113968 193 396 svchost
2226 71 75344 73328 347 412 svchost
1245 182 24888 28940 1308 1240 svchost
Tam da istenen bu. Powershell bunun için güzel :)
Hatta bunları da Working Set değerine göre azalan şekilde sıralamak istersek yazılması gereken bir boru karakteri daha var:
ps svc* | ? {$_.Handles -gt 1000} | sort WS -DescBu komutu da uzun uzadıya yazmak istersek
Get-Process -ProcessName svc* | Where-Object {$_.Handles -gt 1000} | Sort-Object -Property WS -Descendingolurdu. Tabloyu çok karmaşık bulursanız, sadece Handles ve Working Set değerlerni süreç isim ve ID'leriyle görmek isterseniz bu alanlardan sadece bazılarını select ile seçmeniz gerekir:
ps svc* | ? {$_.Handles -gt 1000} | sort WS -Desc | select Id, ProcessName, WS, Handles
Bu noktadan sonra uzunlarını yazmaya gerek yok bence.
Hala eklenebilecek şeyler var. Working Set sütununun sayısal biçimlendirmesini beğenmeyenler binlik ayraç kullanmak isteyebilir. Bu durumda
ps svc* | ? {$_.Handles -gt 1000} | sort WS -Desc | select Id, ProcessName, @{N="WorkingSet";E={"{0,13:N0}" -f $_.WS}}, Handles
yazılabilir. Sonuç şu şekilde olur:
Id ProcessName WorkingSet Handles
-- ----------- ---------- -------
396 svchost 114.790.400 1005
412 svchost 72.474.624 2173
1240 svchost 29.532.160 1245
Çıkışı buraya sığdırmak için boşlukları sildiğimi itiraf etmeliyim. Ama bunu gerek kalmadan sonuç üretmek için de Format-Table * -Autosize ekleyebilirdim. Yani:
ps svc* | ? {$_.Handles -gt 1000} | sort WS -Desc | select Id, ProcessName, @{N="WorkingSet";E={"{0,13:N0}" -f $_.WS}}, Handles | ft -AutoSizeSonuç şöyle olurdu:
Id ProcessName WorkingSet Handles
-- ----------- ---------- -------
396 svchost 114.221.056 1005
412 svchost 72.462.336 2173
1240 svchost 29.532.160 1247
Temiz ve güzel.
Hiç yorum yok:
Yorum Gönder