Windows PowerShell

Oğuz~#>

Kıdemli Üye
5 Tem 2009
4,772
16
Bursa
Windows PowerShell için sadece bir komut kabuğu dememiz doğru olmaz. PowerShell kendi başına yönetimsel işlerin otomasyonu kolaylaştıran ve yöneticinin üretkenliğini arttıracak bir betik(scripting) teknolojisinide beraberinde getirir. Konsol basit bir komut yorumlayıcısından çok bir programlama dili derleyicisi gibi davranır. .NET programlama dili ile kendi komutlarımızı dahi yazıp kabuk içine entegre edebiliriz.


Microsoft PowerShell?i Longhorn Server?ın içinde dağıtacağını duyurdu. Fakat hali hazırda kullandığınız Windows versiyonları için alttaki linkten 1.0 versiyonunu bilgisayarınıza indirip yükleyebilirsiniz.

Windows Server 2003 R2 and Windows Server 2003


PowerShell 1.0 kurulumu yapmak için gereksinimler;
.NET Framework 2.0 Windows XP Service Pack 2, Windows 2003 Service Pack 1 veya daha yeni bir Windows sürümü

PowerShell ?i başlatmak için;

?Start > All Programs > Windows PowerShell 1.0 > Windows PowerShell? tıklanabilir. ?Start > Run ? a ?PowerShell? yazılıp çalıştırılabilir.



1000001090_image001.jpg




Ekran görüntüsü standart ?cmd? konsoluna benzemektedir. Fakat işlevselliğindeki farkları birazdan göreceğiz.

Cmdlets Nedir?

Cmdlets en basit anlamda PowerShell?in yeni komut setidir diyebiliriz. Fakat bu komutlar standart çalıştırılabilir (executable) dosyalar şeklinde değilde .NET fonksiyonları şeklinde çalışmaktadır. .NET programlama dillerinin namespace mantığı da burda kullanılmıştır. Her komut VERB-NOUN yani Fiil-İsim şeklinde tanımlanmıştır. Bi örnekle açıklamak gerekirse ?Get-Process? komutu (cmdlets) çalışan uygulamaların bir listesini vermektedir. ?Stop-Process? komutu çalışan bir uygulamayı durdurmak için kullanılır. Aynı şekilde tanımlanmış ?Get-Service? ve ?Stop-Service? komutları servisleri listeler ve durdurur. Komutlar bu şekilde benzer yapılarda tanımlanmış olması komut öğrenmeyi kolaylaştırmak adına gerçekten önemlidir.

?Get-Command? komutuyla kullanılabilir cmdlets listesini alabilirsiniz.

?Get-Command ?Verb Get? komutuyla ise Fiil?i Get olan ( yani get ile başlayan) komutların bir listesini alabilirsiniz.


1000001090_image002.jpg


Yardım Almak

PowerShell konsolunda yardım almak ve komutların yazım düzenlerini görmek için kullanabileceğimiz birkaç metod var. Bize tarihi gösteren

?Get-Date? komutu ile ilgili yardım almaya çalışalım.
Get-Help Get-Date >> Get-Help komutunu kullanabiliriz Get-Date -? >> -? Argümanını kullanabiliriz man Get-Date >> unix tarzı ?man? komutunu kullanabiliriz help Get-Date >> geleneksel ?help? komutunu kullanabiliriz

1000001090_image003.jpg

Alias

Alışkanlıklardan vazgeçmemek adına PowerShell önceden kullandığımız cmd ve unix komutlarına karşılık gelen cmdlets komutları için aliaslar tanımlamıştır. Bunların bir listesini ?Get-Alias? komutuyla görebilirsiniz. Örneğin cmd?deki copy veya unix sistemlerdeki cp komutu için ?Copy-Item? cmdlets komutu için alias tanımlanmıştır. Yani PowerShell içinde ?Copy-Item? , ?copy? yada ?cp? yazmak aynı komutu çalıştırır.



1000001090_image004.jpg



Yeni alias tanımlaması yapmak için Set-Alias komutu kullanılır. Örneğin ;

Set-Alias -Name gi -Value Get-Item


Bu komutla Get-Item komutunu gi şeklinde çalıştıracak alias ı tanımlamaış olduk.

Tanımlı alias?lar , karşılık geldikleri cmdlets komutu ve görevleri ile ilgili bikaç örnek;


OdA3LP.png


Otomatik Tamamlama

PowerShell in sunduğu kullanım kolaylıklarından biride otomatik tamamlama. Tab tuşuna basmak suretiyle sadece yazdığımız komutları değil bunların argümanlarını da tamamlayabilmektedir. Argüman tamamlama olayı belliki komutların birer .NET komutu olmasından ve daha önceden tanımlanmış olmasından kaynaklanmaktadır. Ama bu konuda geliştirmesi gereken yerler olduğunu söylemeden geçmeyelim. PowerShell hala unix?in bash kabukğunun sağladığı otomatik tamamlama özelliklerinin tamamını barındırmamaktadır fakat eminimki ilerleyen versiyonlarda bunlar da eklenecektir.

Pipeline

Pipe ( boru ?|? ) karakteri sayesinde bir komutun çıktısını bir diğerine argüman olarak aktarabiliriz. Bu cmd konsolunda da olan bi özellikti. Örneğin tek seferde ekrana sığmayacak bir ?dir? komutu sonucunu ?dir | more? diyerek sayfalar halinde görmemiz mümkün oluyordu. Fakat PowerShell de bu komut çok daha efektif bir şekilde kullanılır hale gelmiştir.

Örneğin 10 MB dan fazla ram kullanan processleri listelemek için;


1000001090_image005.jpg




ve hatta bunları kapatmak istersek şu komutu uygulayabiliriz.

PS C: Get-Process | where { $_.PM -gt 10MB } | Stop-Process

Bilgisayarımızdaki açık portların bir listesini ve bunları dinleyen programların process numaralarını (pid) bir dosyaya kaydetmek için şu komut uygulanabilir.

1000001090_image006.jpg


Programlama Ortamı Olarak PowerShell

Cmd konsolunun aksine PowerShell tam bir programlama ortamı gibi hizmet verebilir. .NET Framework?ün birçok özelliğini içinde barındıran PowerShell?i kullanırken dikkat etmek gereken bir husus da boşluk karakteridir. Eski konsoldan alışkanlıklarımızla örn; ?cd..? gibi bir komut yazarsak PowerShell bize hata üretecektir. Çünkü sizin cd olarak çalıştırdığınız komut aslında ?Set-********? cmdlets komutuna atanmış bir aliasdır. ( ?Get-Alias cd? yazarak görebilirsiniz ) Komutların ve argümanlarının arasında boşluk bırakmak zorunludur ve doğru kullanım şekli ?cd ..? şeklinde olmalıdır. Bu küçük hatırlatmayı da yaptıktan sonra PowerShell?in birkaç küçük özelliğine göz atalım.

Siz cmd konsoluna ?1+1? ifadesini girmiş olsanız konsol size böyle bir komut olmadığına dair hata verecektir. Fakat PowerShell bir programlama ortamı olduğundan bunu hesaplayacak ve sonucu bize gösterecektir. Bu tarz matematiksel işlemleri direk PowerShell konsoluna girerek hesaplatabiliriz.

1000001090_image007.jpg



Bu örnekte de görüldüğü gibi ister direk sayılar girerek ya da istersek değişkenler tanımlayarak bunları hesaplatabiliyoruz.

Bir küçük örnek de standart olarak gelen ?PS C:>? promptunu değiştirmekle ilgili verelim.


1000001090_image008.jpg


Prompt fonksiyonu ile kullandığımız promptu değiştirebilir ve ihtiyaçlarımıza göre özelleştirebiliriz.

Bu kez de -lt (less then) ve ?gt (greater then) ifadeleriyle bir if koşullu ifadesi oluşturmaya çalışalım.



1000001090_image009.jpg



Şimdi programlama tarafında ne kadar ileri gidebileceğimizi göstermek adına biraz abartalım J

Öncelikle .NET System.Windows.Forms namespace?ini yüklemek için şu komutu çalıştıralım.

PS C:> [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

Daha sonrada resimdeki komutlarla bir önce bir Windows formu sonra bir buton oluşturup bunu ekranda göstermeyi deneyelim.


1000001090_image010.jpg

PowerShell ve Registry

PowerShell in standart sürücüleri arasından registry düğümleri de vardır. ?Get-PSDrive? komutuyla sürücülere bir bakalım.


1000001090_image011.jpg


Görüldüğü üzere PowerShell registry?deki HKEY_CURRENT_USER ve HKEY_LOCAL_MACHINE düğümleri için birer sürücü tanımlaması yapmıştır. Bir sürücüdeki klasör ve dosyalarda dolaşırcasına bu düğümlerde dolaşabilirsiniz. Şimdi bilgisayarımızda Remote Desktop açık durumda mı bir bakalım ve kapalı olan Remote Desktop u registry?deki değerini değiştirerek açalım. Registry?de bir değeri görüntülemek için Get-ItemProperty ve bunu değiştirmek için de Set-ItemProperty komutları kullanılır.


1000001090_image012.jpg


PowerShell ve WMI Scripting

PowerShell?in kendi scriptlerinin dışında WMI scriptlerini de çalıştırabiliriz. WMI (Windows Management Iinstrumentation) sorguları sayesinde local bilgisayar veya network kaynakları için sorgulamalar yapabiliriz. Şimdi PowerShell ile WMI uygulamalarına birkaç örnek verelim.

Öncelikle WMI kullanarak bilgisayarmızdaki printerları listelemeye çalışalım. Bunun için Get-WmiObject komutunu kullanabiliriz. Ayrıca Select komutuna pipe yaparak sadece yazıcı adlarının listelenmesini sağlayalım.



1000001090_image013.jpg




Şimdi yine biraz abartıp WMI komutlarıyla ping request?i gönderelim fakat PowerShell?in scripting özelliklerinden faydalanarak 1 den 254 e kadar bir döngü oluşturalım ve networkümüzdeki tüm makinaları tarayalım. Ayrıca sadece istediğimiz kolonların görüntülenmesi içinde Select komutunu kullanalım. Bakalım neler olacak.

1000001090_image014.jpg


Gerçekten yapılabilecekler sınırsız gibi görünüyor. Bu makale PowerShell için bir kullanım klavuzu olmaktan çok onun getirdiği yenilikler ve onunla ne kadar kompleks görevleri birkaç satırlık kodla gerçekleştirebileceğimizi göstermek amacıyla yazılmıştır. Daha sonra PowerShell?in spesifik özellikleri ile ilgili daha ayrıntılı makaleler yazmayı düşünüyorum. Şimdilik bu kadar. Bir sonraki makalede görüşmek üzere...

Turkhackteam.net
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.