Windows PowerShell

Merhaba bu makalede Microsoft tarafından son zamanlarda çok fazla ön plana çlıkartılmaya çalışılan bir konu hakkında bazı bilgiler vermeye çalışacağım. Söz konusu  şey Windows Powershell. Windows PowerShell Microsoft tarafından geliştirilen yeni nesil bir komut kabuğudur. Yeni nesil Windows işletim sistemleri tarafından kullanılması planlanan bu etkileşimli komut satırını Command Promt gibi kabuk komut satırlarından ayıran en önemli şey Microsoft. NET Framework ile entegre edilmiş nesne tabanlı bir ortam olmasıdır. Bu nedenle, PowerShell çok daha güçlü ve selefinden daha gelişmiştir.

powershell_2

Daha önceki Windows kabuk yapısını muhafaza edilmesi kullanıcıların bilgi ve deneyimlerinin korunmasını sağlarken yeni geliştirilen bölümler ile uygulamanın daha rahat kullanılması hedeflenmiştir.

Bilindiği üzere Unix, Linux gibi işletim sistemleri daha çok CLI (Command Line Interface) kullanmaktadır. Bu yüzden sistem yöneticileri sistemin iç noktalarına kadar erişebilmektedir.  Microsoft yazılımcıları da özgür bir şekilde Microsoft Server ve Clientlar’da sistemin uç noktalarına kadar gezinebilecek yeni uygulamaları zaman içinde geliştirmeye başlamıştır.

Powershell, sistem yöneticileri ve uzman kullanıcılar için tasarlanmış komut satırı bazında bir kodlama dilidir. .NET Framework kütüphanesini destekler, Powershell Kullanıcılar için windows’da çalışır durumda olan uygulamaların yönetimini ve denetlemelerini otomatize etmesine yardımcı olur. Powershell zengin ve geliştirilmiş bir kodlama diline sahiptir. Zaten .NET framework kullandığından .NET komutları da Powershell de kullanılabilir. Hatta küçük çaplı programlar ile uygulamalar bile geliştirilebilir. GUI ile yapılacak işlemleri birkaç komut ile daha kısa zamanda gerçekleştirilmesine de olanak sağlar. Ayrıca Powershell kullanılarak script (betik) yazılabilmesi sistemi yönetmek adına büyük rahatlık sağlar.

Powershell Windows Server 2008 ve Windows 7 de varsayılan olarak gelmektedir. Önceki Windows sürümlerinde kullanılması amacı ile http://www.microsoft.com/windowsserver2003/technologies/management/Powershell/download.mspx  bağlantısından ilgili işletim sistemi sürümüne uygun olanın indirilip sisteme kurulması sağlanabilir.

Powershell Kullanımı

Powershel uygulamasını çalıştırabilmek için TaskBar(Görev Çubuğu) üzerindeki “Powershell” kısa yolu seçilebileceği gibi Start(Başlat) menüsünden All Programs(Programlarım) seçeneği içinden Administrative Tools(Yönetim Araçları) içinden Windows Powershell Modules yolu veya  Start(Başlat) menüsünden Run(Çalıştır) komut bölümüne Powershell.exe komutu yazılarak erişilebilir.

25

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. Bir örnek vermek  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.

1

Yardım Almak

PowerShell konsolunda yardım almak ve komutların yazım düzenlerini görmek için kullanabilecek birkaç yöntem var. Örneğin  tarihi gösteren “Get-Date” komutu ile ilgili yardım alınmaya çalışıldığında;

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

2

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.

3

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.

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;

PS C:\ Get-Process | where { $_.PM -gt 10MB }   komutu kullanılır.

4

Bilgisayarımızdaki açık portların bir listesini ve bunları dinleyen programların process numaralarını (pid) bir dosyaya kaydetmek için  ” netstat -ano | findstr “Listening” > OperPorts.txt ” komutu kullanılır.

Programlama Ortamı Olarak PowerShell

Makalenin başında da belirtiğim gibi PowerShell de basit programcıkların yazılması mümkündür. 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-Location” 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.

5

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

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

6

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.

7

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  komutu kullanılır.

8

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.

9

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.

Powershell Command dokümanında PowerShell içinde kullanılan bazı komutları vermeye çalıştım.

Kaynaklar;

Windows PowerShell Getting Started Guide and Quick Reference

Windows PowerShell Team Blog

Umarım faydalı olmuştur.. bir sonraki makalede görüşmek üzere…

  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

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. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: