• Web sitemizin içeriğine ve tüm hizmetlerimize erişim sağlamak için Web sitemize kayıt olmalı ya da giriş yapmalısınız. Web sitemize üye olmak tamamen ücretsizdir.
  • Sohbetokey.com ile canlı okey oynamaya ne dersin? Hem sohbet et, hem mobil okey oyna!
  • Soru mu? Sorun mu? ''Bir Sorum Var?'' sistemimiz aktiftir. Paylaşın beraber çözüm üretelim.

Microsoft PowerShell

TRWE_2012

Süper Moderatör
Üyelik Tarihi
2 Haz 2020
Konular
3,091
Mesajlar
5,890
MFC Puanı
20,830
Windows PowerShell Nedir? Ne İşe Yarar

Bugünkü Windows 7 İşletim Sistemi İle ilgili makalemiz;çoğu Windows kullanıcısının bilmediği veya az bildiği(derin bilgisi olanları bu ifaden uzak tutarım...!) PowerShell(yeni nesil windows ms-dos komut'u olup linux'de (açık kaynak kodlu işletim sistemini oluşturanların bileşenlerin tümü....) yıllardır varolan bir istemci-komut setleri...şeklinde ifade edilebilir.Konuya girişgah yaptığımıza göre konun ayrıntılarına girelim.

Daha önce yukarıda kısaca PowerShell’in Ms-Dos benzeri bir komut sistemi olduğunu ve Ms-Dos’tan çok daha gelişmiş bir platform olduğunu söyledik. Fakat Bu konuya biraz daha değinmek gerekirse.Linux ve Unix taraftarlığının en büyük sebebi komut satırları ile sistemin bütün özelliklerine ulaşabilmelerinden dolayı hissettikleri özgürlüktür. Windows tarafında ise durum biraz farklı Microsoft CLI(command line interface) yerine daha çok GUI(graphic user interface) üzerinde çalışılıyordu. Buda kullanıcının sadece Windows’un görünen yüzü ile uğraşabilmesi anlamına geliyor. Daha üst düzey kullanıcılar ise sistem özelliklerine erişebilmek için Ms-Dos komut satırlarını kullansalarda Ms-Dos yeterli esnekliğe sahip olmadığı için yine istediklerini alamıyorlardı. İşte Microsoft bu açığı kapatmak için Windows PowerShell’i geliştirdi.
Microsoft Windows PowerShell Bilişim Teknolojileri uzmanları ve özellikle Sistem Programcıları için geliştirilmiş komut satır kabuğu ve komut dilidir. Bu kabuk sayesinde sistem kontrolünü çok kolay ve etkin bir şekilde kullanabilmek mümkün. Şöyleki 130 civarında standart komut satırı ve tutarlı söz dizimi ve hizmet programları, script dili ve birçok özelliği sayesinde sistemi yönetmek ve otomasyonları hızlandırmak çok daha kolay.

Windows 7 ve Server 2008’e entegre olarak gelen PowerShell’i Windows XP,Vista ve Server 2003 ‘te de kullanabilmek mümkün. Fakat öncelikle sisteminizde .NET Framework 2.0 veya daha üstü yüklü olması gerekmektedir.
**Buda demek oluyorki PowerShell ile .Net düzeyinde uygulamalarda geliştirilebilir anlamın gelmektedir.

Windows PowerShell

PowerShell efektif bir şekilde kullanıldığı takdirde Windows Server yöneticilerinin günlük olağan işlerini otomatize etmeye ve yönetimsel görevleri kolaylaştırmaya yardımcı olacak bir çok yeniliği de beraberinde getiriyor. Kodadı Nomad ve WSH (Windows Shell) olarak geçen PowerShell’in release tarihi olan Kasım 2006 dan bu yana 400.000 den fazla download edilmesi de bu ürünün yakın gelecekte Windows yöneticilerinin vazgeçilmez bir yardımcısı olacağının sinyallerini vermekte.
Windows PowerShell için sadece bir komut kabuğu dememiz doğru olmaz. PowerSheel 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.

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 instance’ları ş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.

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

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. Fakat komutların yerine cmdlets ifadelerini kullanmaya ve öğrenmeye çalışmalıyız.

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;

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

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

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.

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.

Ş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]::LoadWithPartialNam e("System.Windows.Fo rms")

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

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.

Görüldüğü üzere PowerShell registry’deki HKEY_CURRENT_USER ve HKEY_LOCAL_MACHINE düğümleri içim 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. Tek bir komutla da registry’deki değerleri değitirebiliriz. Ş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.

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.

Windows 7 Powershell’i Doğru Kullanmak

Windows 7 profesyonel kullanıcılar için iyileştirilmiş sistem araçları sunuyor. Bunlardan biri kompleks görevleri de yerine getirebilen Windows PowerShell.Yeni nesil komut satırı PowerShell aslında Vista ile beraber sunulacaktı; ama sonuç sadece harici bir download biçiminde sunuldu. Ancak iyileştirilmiş 2.0 sürümüne ulaştıktan sonra Windows 7′nin daimi bir bileşeni haline gelebildi. Windows XP’den kalma eski komut satırı hala mevcut; ama artık kullanmaya gerek yok. PowerShell her şeyi daha iyi yapıyor: Çok daha fazla imkân sunuyor ve zincirleme komutlarla dolu karmaşık görevleri dahi yerine getirebiliyor.

Yeni konseptin Doğru Anlaşılması:

PowerShell’i açmak için başlat menüsündeki arama kutusuna »powershell« yazmanız yeterli. Bunu yaptığınızda üç sonuç belirecektir: Hiçbirine bakmadan direkt Enter’a bastığınızda komut istemi penceresi açılacaktır. »Windows PowerShell ISE« sonucu ise özellikle betik geliştirmede yardımcı olan grafiksel arabirimi açar. Üçüncü sonuç olarak modülleri görmek mümkün. Giriş için en mantıklı olan grafiksel sürümü seçin. Sürekli kullanmanız gerekiyorsa ya PowerShell’in kısayolunu oluşturun ya da görev çubuğuna sabitleyin.

Eski komut istemi penceresinden farklı olarak PowerShell, sürekli nesne tabanlı çalışır; PS, Microsoft . NET Framework nesnelerini baz alır. Fonksiyon yelpazesi dışındaki avantajı: Nesnelere erişim düzenli bir şekilde gerçekleşir. Şimdiye kadarki DOS komutlarının yerini Cmdlets (açılımı Commandlets) alıyor. Cmdletleri bir satır içerisinde »|« karakteri ile birbirine bağlayabiliyorsunuz. Böylece bir Cmdlet, kendinden öncekini işleme koyuyor ve böylece kompleks görevleri pratik bir şekilde formüle etmeyi mümkün kılıyor.

PowerShell, bir komut satırında çok sayıda komutu birbirine bağlayabilir ve sonuçları aktarabilir.

Yeni komut söz dizimine dikkat ediniz

PowerShell ISE penceresi script (betik), çıktı ve komut alanları şeklinde üçe ayrılıyor. Alanları fareyle veya »View« menüsünden aktif hale getirebiliyorsunuz. »File« menüsünden scriptleri kaydedebilir, yükleyebilir ve »Debug« menüsünden adım adım çalıştırabilirsiniz.
Komut satırı bölümündeki alandan başlayın. PowerShell alışmış olduğumuz üzere güncel dizini gösterir. Cmdlet biçiminde önceden tanımlanmış komutların ismi fiiMsim kalıbını takip ediyor. Bir diğer dizine geçmek işini örneğin »Set-Location« Cmdlet’i yapıyor. »Get-Childitem« ise bir klasörün içeriğim gösteriyor. Ön tanımlı komutların listesini »Get-Command« ile elde edebilirsiniz.

Bazı alışmış olduğumuz DOS komutları yine kullanılabiliyor. Mesela dizin değişimi için »cd« (change directory) komutu da işe yarıyor. En azından bu komutları çağırmak hala mümkün; çünkü Microsoft tüm komutları yeniden tanımladı. Kısaltması girildiğinde buna tekabül eden Cmdlet’i çağıran aka-terimleri (alias) sıralaması bu görevi görüyor. Ön tanımlı aka-terimlerinin listesini »get-alias« komutu ile görebilirsiniz. Eski komutları kullanırken alışıldık parametrelerin çoğunlukla işe yaramadığını göreceksiniz. Doğru yazım biçimini ve olası tüm parametreleri Cmdlet yardım bilgisinden öğrenebiliyorsunuz. Mesela Get-Childitem Cmdlet’i hakkında bilgi almak için »Get-Help Get-Childitem« yazmanız yeterli. Argüman olarak hakkında yardıma ihtiyaç duyduğunuz komutu yazın. Yukarıda verdiğimiz örnek sayesinde eskiden tanıdığımız »dir« komutuna tekabül eden »GetChilditem« Cmdlet’i hakkında bilgi alırsınız.

Önemli: Grafiksel arabirimde istediğiniz an |F1] tuşu ile hem genel hem de güncel içeriğe yönelik yardım alabilirsiniz.

Komutları birbirine bağlanması:

Bir klasörün içeriğini görüntülemeye dair basit bir örnekle Cmdlet konseptinin eski DOS komutu »dir«i nasıl bir adım öteye götürdüğünü gösterilmesi. Tipik bir görev: Bir klasörün içindeki dosyalar arasında belirli niteliklere sahip nesneleri bulunması. Örneğin bir dizinin içindeki en büyük beş MP3 dosyasını arıyorsunuz. PowerShell ile bu görevi hızlıca ve birkaç zincirleme komut ile halledebilirsiniz. Bu iş için:

Kod:
Get-Childitem -recurse -
include *.mp3 |
Sort-Object length -descen-
ding |
Select-Object -first 5

şeklindeki Cmdlet zincirini girin. Bu komut öncelikle tüm alt klasörlerde bulunan MP3 dosyalarını ardışık biçimde tanımlar ve bunları nesne olarak iletir, ikinci adım ise nesneleri büyüklüğe göre azalan bir sırayla listelerken üçüncü adım bunlardan ilk beşini seçer.
 
Üst