in Eski Blog Yazılarım

.Net ile PowerShell Module Geliştirme

Powershell geçtiğimiz yıllarda hayatımıza girdi ve Windows üzerinde scripting’e yeni bir boyut kazandırdı. Arkasındaki güçlü .Net Framework desteği sayesinde de Powershell ile hayal ettiğiniz her hareketi yapar hale geldik. Eskiden Batch Scripting ile 30 satırda yapılabilen işler Powershell kullanılarak tek satırla indirgenebiliyor. Tabi her zaman tam ihtiyacınıza uygun komut bulunmadığından genişletmek veya uygulamanızı command line ile de yönetmek isteyebiliyorsunuz.

(Aga, laga luga yapma hepsini okuyacak vaktim yok, bana kodu ver modundaysan proje dosyasına burdan ulaşabilirsin.)

İşte bunun için PowerShell yazılım geliştiricilere genişletilebilir özellikler sunuyor. Bakalım bu özelliği .Net üzerinde nasıl kullanabiliyormuşuz.

PowerShell Modülümüz Ne Yapacak?

Bir alanadının (domain) bilgilerini alıp ekrana basan basit bir Whois modülü yazacağız. Bunu Powershell üzerinden de yapabilirz tabiki fakat konu PowerShell modülü nasıl yazılır olduğudan .Net tarafına değineceğiz ;)

Neler Lazım

  • Genelde Windows 7 ile birlikte Powershell’in 1.0 sürüm yeterli fakat 2.0 sürümüde yükleyebilirsiniz. Sürümlerle ilgili burdan detaylı bilgi alabilirsiniz
  • Visual Studio 2010’un herhangi bir sürümü.
  • PowerShell modülü geliştirebilmek için Powershell Referansları.
  • .Net Framework 2.0 ve üzeri.

PowerShell Referansları

Genelde;

C:Program FilesReference AssembliesMicrosoftWindowsPowerShellv1.0

dizini altındadır. Burda gerekli olan dosya System.Management.Automation.dll ve Native olarak gelen System.Management referansınıda projenize eklemeniz gerekir.

Başlangıç

Powershell modülü geliştirmek içn ortamı tedarik ettikten sonra Visual Studio üzerinden New > Project > Class Library komutunu veriyoruz. PowerShell modülü için .Net 2.0 CLR versionu gerekli olduğundan .Net Framework 3.5 seçiyoruz.

.Net 4.0 neden seçmedik diyebilirsiniz. Modülü .Net 4.0 ile de geliştirebiliriz fakat bunun için Powershell.exe.config’e bir talimat vermemiz gerekir. Yeri gelmişken verelim.

C:Windowssystem32WindowsPowerShellv1.0 dizininde yani $pshome (Bunu powershell içinde çağırırsanız aynı klasörü döndürecektir) powershell.exe.config dosyasını bulun. Yoksa da yaratın. Daha sonra aşağıda ki tanımlamayı gerçekleştirin.

Bundan sonra .Net 4.0 altında PowerShell geliştirebilirsiniz. Fakat bu projede gerek olmadığından ben .Net 2.0 ile idare ediyorum.

Kod

Açıklama

Kod’a baktığımızda ilk dikkatimizi çeken Cmdlet tipinden WhoisCommand classımızı türetiğimiz dir (inheritance olayı).
Standart bir Powershell komutu şeklinde hareket etmesini sağlamak için Cmdlet’den türetiyoruz. Yine Cmdlet sınıfının kurallarından CmdletAttributes’ini deklare etmemiz gerekiyor ki Powershell modülü çalıştırırken hangi maksatla çalıştırıldığını bilsin.

Burda biz veri çağıracağımız için VerbsCommon.Get enum’unu kullandık fakat herhangi bir değer tanımlayacak olsaydık VerbsCommon.Set de diyebilirdik. Bu konu ile ilgili ayrıntılı bilgiyi buradan alabilirsiniz. Uzun uzun hepsini saymak 5 sayfayı alır :)

NounName

CmdletAttribute’nin diğer bir parametreside NounName. NounName Powershell ortamında komutun isminin ne olacağını belirler burda "Whois" dedik fakat Verbs’lerden Get’i seçtiğimiz için Powershell ortamında komutu çağırmak için "Get-Whois" şeklinde kullanmamız gerekiyor.

Parametereler

Bu ortamda parametere oluşturmak için basitçe ilgili class’da property oluşturup ParameterAttribute vermeniz yeterli. Burda dikkatinizi çekmiştir, Parameter özelliğinin Mandatory parametresi true. Bu demektir ki, parametre Powershell ortamında zorludur. Bizim senaryomuzda da zaten girilmezse Whois çalışmayacağından bunu "true" olarak verdik. ParameterAttribute’sinin full referansı için buradan kastırabilirsiniz.

Tanımlaraları yaptıktan sonra hemen ProcessRecord() methodnu override edip içini dolduruyoruz. Bu method Powershell’in giriş methodu olduğundan herşey burda çalışıyor dolayısıyla bizim methodlar çalışıyor ve whois bilgisini, whois serverdan talep ediyor. Herşey yolunda gidersede aldığımız string değeriniz WriteObject(); methodu ile ekrana basıtırıyoruz.

Import-Module

Geliştirdiğimiz modülü PowerShell ortamında kullanabilmek için Import-Module komutunu kullanıyoruz. Şöyle ki;

Modülümüzü kontrol etmek istersek de Get-Module komutu işimizi görüyor.

 

Yukarıda gördüğünüz gibi Name Projemizin ismi, ExportedCommands ise Get-Whois olarak PowerShell ortamına yansımış durumda.

Bundan sonra "Get-Whois domain.com" komutu vererek istediğimiz alanadının whois bilgilerine ulaşabiliriz.

Hepsi bu kadar. Umarım yardımcı olmuştur.

Vs.Net 2010 Proje Dosyası : PoshWhois.zip

Yorum Bırak

Comment