PowerShell Temel DERSLER 7 (NESNELER Get-Member,Select Object,Properties,Methods)

Merhaba Arkadaşlar, yeni bir makalemize başlıyoruz. Bu makalemizde powershell de nesneleri ve o nesneleri nasıl keşfedeceğimizi göreceğiz. Bu bölüm özellikle yeni başlayan arkadaşlar için çok önemli olup konuyu bilen arkadaşlarında gözden geçirmesi gereken bir konu. Çünkü birçok programcı gördüm nesnenin ne demek olduğunu bilmeden nesneleri kullanıyor. İşin açıkcası güzelde kullanıyor fakat ezberci bir zihniyet olduğu için geliştirme yapamıyor sadece kullanıyor.

Yeni başlayan arkadaşlar hemen soracaklardır. Programcılık konusunada nerden geldik. Arkadaşlar Powershell aynı zamanda bir programlama dilidir. İhtiyacınız komut yazıp ihtiyaçlarınızı görmekse zaten bunu yapabiliyorsunuz. Powershell ie ileri düzeyde programlarda yazabilirsiniz. Zaten powershell in başındaki power ifadeside buradan geliyor önceki nesil komut arayüzlerinden ve benzeri script programlama dillerinden daha güçlü bir yapı ile karşı karşıyayız.

 

Eskiden

Şimdi

Grafiksel Kullanıcı Arayüzü

MMC

Powershell

Interaktif Shell

CMD

Powershell

Betik Dili

BAT

Powershell

COM

WMI

Powershell

İnternetten bulduğum bu tabloda eksik olan birşey var oda şu ki powershell .net tabanlı olduğu için .net kütüphanesindeki tüm yetenekleri kullanabilir. Bu kütüphaneyi öncesinde Microsoft yazılım dilleri yani Visual basic, C# vb. diller kullanabiliyordu artık Powershell de .net kütüphanesine hükmedebiliyor ve bunun içinde Visual Studio gibi bir IDE ye yani Integrated Development Environment dediğimiz tümleşik geliştirme ortamina ihtiyaç yok. Powershell kullanmak için çeşitli tool ve IDE ler olsada Windowsla birlikte gelen PowerShell Console ve PowerShell ISE yeterli olmaktadır.

Nesneler konusuna başlamadan önce kütüphane ne demek nesne ne demek bu kavramları kafamızda iyi oturtmamız lazım.

Kütüphane bildiğimiz çeşit çeşit kitaplardan oluşan bir bina. Yani içerisinde her konudan her bilimden kitapların olduğu bir yer olarak kafamıza yerleştirelim. Classlar yani sınıflar dediğimiz yapıda bu kütüphanede bulunan kitaplar olarak düşünelim. Bildiğiniz gibi her kitabın birbirinden farklı özellikleri yetenekleri vardır ve bizlerde kütüphanelerden bu kitapları alıp okuyabildiğimiz gibi fotokobilerini çekip fotokobileri üzerinde değişiklikler karalamalar silmeler yapabiliriz. İşte fotokobi çekerek bir örneğini aldığımız o fotokobiler o kitaba ait nesne oluyor.

.net kütüphanesi ve nesne kavramıda temel mantık olarak verdiğimiz örneğe çok benzer. Bizler uzun uzun kodlar yazmak yerine .net kütüphanesinde daha önceden yazılıp test edilmiş kod parçacıklarını alıp istediğimiz gibi kullanacağız. Peki ya bunu nasıl yapacağız. Henüz o noktada değiliz arkadaşlar sadece nesneler konusuna geldiğimiz için .net için küçük bir başlangıç yaptık. Çok kafanıza takmayın ilerde detayları ile öğreneceğiz.

Şimdi örnekler yaptıkca nesne kavramını yavaş yavaş öğreniyor olacağız

Şöyle bir örnekle başlayalım ipconfig komutu mevcutta bulunan ethernet kartımızın bazı bilgilerini verir.

ipconfig |find ‘IPv4 Address’ komutuda çıktı içerisinden ‘IPv4 Address’ ifadesinin bulunduğu satırları verir. Benim çıktımda 3 tane satır bulunmuş bunun nedeni bilgisayarımda 3 tane network kartı olmasından kaynaklanıyor.

Snap_2018.03.02 13.09.42_045

pekiya ben aynı zamanda  ‘IPv6 Address’ ifadesinide görmek isteseydim. Bunu ayrı ayrı komutları çalıştırıp sonuçlarını birleştirerek yapabilirdim. Çünkü ipconfig komutu ile ancak bu kadar yapılabiliyor. Yani ipconfig komutunun çıktısı düz bir metindir.

Powershell de ipconfig komutunun işlevini gören komut Get-NetIPAddress komutudur. Şimdi aynı amaca bu komutla ulaşmaya çalışalım. Get-NetIPAddress komutunu çalıştırdığımızda tüm ethernet kartlarımızın özelliklerini gösteriyor.

Get-NetIPAddress |Format-Table IPv4Address,IPv6Address komutunu verdiğimizdede tüm ethernet kartlarımızın sadece istediğimiz özelliklerini görüyoruz.

Snap_2018.03.06 17.52.29_001

Başka bir örnekte Cmd den alışık olduğumuz dir komutu nun çıktısı, bu çıktı düz metindir. Üzerinde çalışmak çok zordur.

Bir sonraki örnektede Get-ChildItem komutunun çıktısı üzerinde işlem yapıyor olacağız. .

Snap_2018.03.02 14.28.33_050

Get-ChildItem -File C:\ | Select-Object Name,LastWriteTime,CreationTime,Directory,Length

Komutunu verdiğimizde çıktıyı istediğimiz gibi biçimleyip görebildik.

Snap_2018.03.02 14.41.59_051

İşin aslına bakarsak Get-ChildItem ın çıktısı bir nesne dir ve nesnelerin özellikleri,methotları ve olayları olur. Bizde komutlarımızdan geriye dönen nesnelerin özelliklerini istediğimiz gibi görebiliyoruz. Bazen tüm özelliklerini bazende özelleştirerek sadece görmek istediklerimizi görüyoruz. İşte nesnelerin bize böyle faydaları varı. Hatırlayın düz metin çıktıları ile çalışmak ne kadar zordu. ipconfig komutundan dönen sonuçları nesnelerden dönen sonuçlar gibi rahat işleyemiyorduk.

Aynı örneğimizle devam edelim.

Get-ChildItem -File C:\Temp | Select-Object Name,LastWriteTime,CreationTime,Directory,Length

Snap_2018.03.02 14.47.30_053

Get-ChildItem | Get-Member komutunu verdiğimizde bize Get-ChildItem komutunun özelliklerini,metodlarını ve olaylarını gösterir. Yani bu komutun çıktıları üzerinde ne gibi işlemler yapılabilirmiş onları göreceğiz.

Snap_2018.03.02 14.57.10_054.jpg

Not:Üzerine vurgulayarak söylüyorum Get-Member komutu powershell i nesnelerini tanımanın tek yoludur. Yok ben google dan bakarım diyenlere ne deyim ben şimdi 🙂

Get-ChildItem -File C:\Temp | Select-Object Name,LastWriteTime,CreationTime,Directory,Length

Şimdi yukardaki komutumuzu istediğimiz gibi özelleştirebiliriz.

Get-Member komutunu kullanarak bilmediğiniz yada hakim olmadığınız bir komutun ne gibi yetenekleri varmış görmek için mutlaka kullanın.

Meğersem dosya ve klasörleri listelemeye yarayan Get-ChildItem ın ne özellikleri varmış yeni gördük. Bu sayede dosyanın ne zaman yaratıldığından tutun en son yapılan değişiklik tarihi version bilgisi vb. özelliklerini görebiliyormuşuz.

İşte bunlar bu komutun nesnel bir yapıya sahip olduğunu gösteriyor. Cmd de dir komutu düz metin çıktısına sahipken powershellde aynı işi yapan Get-ChildItem komutu nesnel bir yapıya sahip ve nesnelerin özellikleri,metodları ve olayları var. Metod ve olay kavramından detaylıca ilerleyen derslerimizde bahsedeceğiz şimdilik sadece property ler le ilgileniyoruz.

Powershell komutlarının Attribute larını yani özelliklerini tanımaya devam edelim. Bu seferki örneğimiz Get-Date yani tarihi göstermeye yarayan komut.

Get-Help Get-Date -Online  komutunu çalıştırıp komutla ilgili yardım alalım. Buradaki örnekleri incelediğimizde komutun çıktısının özelliklerine parantezlerden sonra “.” koyarak ulaşabildiğimizi görüyoruz. Snap_2018.03.02 16.22.59_057

Yeni örneğimizde 1 numaralı komutumuzla  tüm disklerimizi görüntülüyoruz.  2 numaralı komutumuzla bu komutun özelliklerini keşfedip 3  numaralı komutumuzla da istediğimiz özellikleri seçerek sonuca gidiyoruz.

Snap_2018.03.02 16.31.34_059

Örnek: Şimdiki amacımız ethernet kartımızın linkspeed hızını göstermek olsun.

Get-NetAdapter | Get-Member -MemberType property komutu ile Get-NetAdapter in property lerini öğreniyoruz

Get-NetAdapter | Select-Object LinkSpeed komutu ilede amacımıza ulaşıyoruz.

Örnek:  Bu örneğimizdede dosyaların sadece fullname özelliklerini görüyoruz. Mevcut bilgilerimize Out-File komutunuda katalım. Bu komut, komutun çıktısının bir dosyaya alınmasını sağlar

Get-ChildItem C:\Temp | Get-Member -MemberType property

Get-ChildItem -Path C:\Temp\ | Select-Object FullName

Get-ChildItem C:\Temp\ | Select-Object FullName | Out-File C:\Temp\test.txt

Evet arkadaşlar buraya kadar öğrendiklerimizde şunu anlamış olmamız gerekiyor. Powershell de herşey object tir yani nesnedir ve nesnelerin özellikleri,metodları ve olayları olur. Biz özellikleri nasıl keşfederiz ve nasıl kullanırız konusunu öğrendik artık metodlardan bahsetmenin zamanı geldi.

Özellikleri özetlemek gerekirse, Get-Date komutunu düşünün, sonucu bize bir tarih objesi olarak döner. Örneğin 13.04.1976 bu nesnenin .day özelliği 13 .month özelliği 04 .year özelliği 1976 dır.

Metodlar

Şimdi gelelim metodlara, metodlarda nesneler üzerinde işlemler yapmaya yarar örneğin elinizde bir tarih verisi olsun tabiki bu veriyi Get-Date komutu ile elde edin. Get-Date komutumuzun sonucunun 02.03.2018 olduğunu düşünelim. Bu tarihe 10 gün eklersek tarihimiz 12.03.2018 olur. Arkadaşlar artık metod kullanarak verilere etki edeceğiz.

Örneklerimizi incelediğimizde Get-Date komutunun sonuçlarına “.” operatöründen sonra etki edebildiğimizi görüyoruz. Örneğin sonuca gün ekleme gün çıkarma yıl yada ay ekleme çıkarma işlemleri yapabiliyoruz. Property kullanımından tek farkı “.” dan      sonra metodla birlikte  “()”  parantezleri kullanıyor olmamız.

Snap_2018.03.02 17.32.33_061

Şimdide Get-Date komutu üzerinde ne gibi metodlara sahipmişiz görelim. Arkadaşlar unutmayalım metod yada property ezberlemiyoruz Get-Member ile keşfediyoruz. 🙂

Get-Date |Get-Member -MemberType Method komutu ilgili komutun metodlarını listeler. -MemberType kullanmazsanız property,metod ve olarlarının tamamını listeler.

Snap_2018.03.02 17.44.22_063.jpg

Başka bir örnekle devam edelim.

Get-Service komutu bilgisayarımızda çalışan servisleri listeler.

Get-Service | Get-Member -MemberType method komutu ilgili komutun method larını listeler.

Snap_2018.03.05 13.52.16_066

Şimdide spooler servisimiz için bu metodu uygulayalım.

(Get-Service spooler).Stop() Komutu ile önce (Get-Service spooler) yani ilgili servisi çağırıyoruz sonra .Stop() komutu ile servisi durduruyoruz.

Bir önceki çalışmamızda komutların özelliklerini görmeyi incelemiştik. Şimdi bu komutlar üzerinde işlem yapmak yani metodları çalıştırmayı öğreniyoruz.

Örneğimizde Get-Service spooler ile spooler servisini çağırdık. Çıktıdaki özelliklere baktığımızda Status, name ve Displayname alanlarını görüyoruz. Ayrıca servise metod uygulanmadan önce ve sonraki durumlarını görüyoruz. Yani .stop() metodu ile servisimizi durdurduk.  .start() metodu ile de başlatabiliriz

Snap_2018.03.05 16.38.09_069

Şimdide metinsel bir veri üzerinde ne gibi metodlar uygulayabiliriz ona bakalım.

Çift tırnak içerisinde olan herhangi bir ifade string dediğimiz yani karakter dizisi anlamına gelen metinsel veridir. Örneğin “Ey Edip Adanada Pide Ye” ifadesi powershell için metinsel bir veridir. Peki metinsel bir veriye ne gibi metodlar uygulayabiliriz. Önce bir hayal gücümüzü zorlayalım. Bu metin üzerinde ne gibi işlemler olabilir.  Örneğin bu metnin tüm harleri büyük olabilirdi veya verideki boşluk karakterleri çıkartılabilirdi. Olmadı baştan 10 karakterini almak istemiş olabilirdiniz. Yani aklınıza sayısız senaryolar gelebilir. Basit bir konu olmasına karşın bazen metinsel verilerin başından şu kadar ortasından bu kadarını al gibi durumlarla karşılaşabilirsiniz. O yüzden metinsel verilere uygulanacak metodları iyi bilmeniz gerekiyor. Bizim burdaki amacımız metodları öğrenmek, metinsel verilere uygulanacak metodları ilerleyen derslerimizde ara ara anlatıyor olacağız.

Hadi şimdi metinsel verilere uygulanabilecek metodları keşfedelim.

“Ey Edip Adanada Pide Ye” |Get-Member

Gördüğünüz gibi metinsel ifadelere uygulanabilecek metodlar şekildeki gibi biz birkaçını deneyelim.

Snap_2018.03.05 16.51.06_070

“Ey Edip Adanada Pide Ye”.split(‘ ‘) komutu kelimeler arasındaki boşluklardan ifadeyi ayırır.

“Ey Edip Adanada Pide Ye”.Substring(0,5) komutu ifadenin sıfır ıncı karakterinden itibaren (sıfırıncı karakter dahil) beş tane karakteri alır.

Snap_2018.03.05 16.57.30_071

Bir makalemizin sonuna daha geldik. Umarım dersler anlaşılır gidiyordur. Soru ve yorumlarınızı bekliyorum.

Kürşat ARI / System Engineer & PowerShell Developer

 

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s