PowerShell TEMEL DERSLER 2 (PowerShell i keşfediyoruz…)

Get-Command (Komutları Keşfetme)

Şimdi sizlere Get-Command komutu sayesinde powershell komutlarını keşfetmeyi anlatacağım. Ondan önce bir cmdlet nedir onu açıklayalım.

Bir cmdlet(Command-Let) Windows PowerShell’de objeleri işleyen bir komuttur. Cmdlet PowerShell’in komut dizimidir ve bu komut dizimlerinin tamamı .Net platform’u tarafından fonksiyonel olarak desteklenmektedir.

Get-Command komutu ile kullanılabilen bütün cmdlet’lerin listesini alabiliriz.  Daha sade bir ifade ile kullanılabilecek komutların listesini verir.  Komutu girip çalıştırdığımızda karşımıza çıkan ekran aşağıda olduğu gibidir.

1

Lütfen burada panik yapmayın hele hele şöyle bir durumada kapılmayın ya bu kadar komutu ezberleyeceğim öğreneceğim yıllarımı alır en iyisi ben başka programlama dillerine takılayım gibi 🙂

Yıllardır bu işin içinde olan biri olarak inanın şu ekran görüntüsündeki komutların çoğunu ne gördüm ne duydum nede kullandım ama bir proje geliştirme yada bir problemi çözme ihtiyacım olduğunda bu komutlara ulaşmak Get-Help ‘please help me’ yazıp enter a basacak kadar kolay  işin şakası bir yana elbetteki böyle bir komut yok ama inanın bu kadar kolay ve daha öncede söylediğimiz gibi keşfedilebilir bir dil…

Ekran görüntüsü ile ilgili olarak kısaca bahsetmek istiyorum.

Commandtype alanı, Alias, Function, Application ve cmdlet olmak üzere 4 kategoriden oluşuyor. Detaylarına sonra gireceğiz…

Name alanı komutun ismini, version komutun geliştirilmiş son versiyonunu, source ise komutun hangi module içerisinde olduğunu ifade eder.

Module kavramı kesinlikle kafanızı karıştırmasın en sade anlatımı ile modul içerisinde komutları barındıran bir konteynır gibi düşünebilirsiniz. Peki Neden böyle birşeye ihtiyaç duyulmuş örneğin powershell üzerinden Veeam yedekleme uygulamasını yönetmek için Veeam Modulü nü powershell inize entegre edip Get-Command yaptığınızda karşınıza o modüldeki komutlarıda çıkartacaktır.

Örneğin ben bu komutu çalıştırdığımda daha fazla sonuç alabiliyorken sizde daha az sonuç dönmüş olabilir. Powershell modullerle sınırsız bir şekilde genişleyebilir.

Varmıdır bilmiyorum ama örneğin networkcüsünüz ve Cisco bir powershell modülü çıkardı. Sizde bu modülü powershellinize ekleyerek (nasıl eklendiği daha sonraki derslerde anlatılacaktır.) powershell üzerinden cisco cihazınızı yönetebiliyorsunuz desek çokta uçmuş olmayız. 🙂 Sanırım modüllerden temel düzeyde anlayacak kadar bahsettik bu başlı başına bir ders konusu ama zor değil:)

Get-Command cmdlet inin tanımlama ve kullanımını microsoft technet üzerinden incelediğinizde şöyle karmaşık gibi görünen bir syntax görürsünüz.

Syntax
Get-Command [-Noun String[] ]  [-Verb String[] ] [[-ArgumentList] Object[] ]
[-All] [-ListImported] [-Module String[] ]
[-ParameterName String[] ] [-ParameterType PSTypeName[] ]
[-Syntax] [-TotalCount Int32 ] [ CommonParameters]

Get-Command [[-Name] String[] ]  [-CommandType CommandTypes ] [[-ArgumentList] Object[] ]
[-All] [-ListImported] [-Module String[] ]
[-ParameterName String[] ] [-ParameterType PSTypeName[] ]
[-Syntax] [-TotalCount Int32 ] [ CommonParameters]

Sizlerden ricam kesinlikle buradaki karmaşıklığa takılmayınız. Ben 2010 yılında ilk powershell ile tanıştığımda bu gibi söz dizimlerini gördüğümde hep ümidim kırılırdı. Metot şu ise  hiçbir zaman sorun yaşamazsınız ve hiçbir şeyde gözünüzü korkutmaz. Basitten zora doğru gidiyorsanız yada merdivenin tüm basamaklarını tek tek çıkıyorsanız hedefinize ulaşacaksınız dır.

Powershell ile yeni tanışan birinin bir görüşte bu kadar parametreyi hemen yorumlaması elbette beklenmez. Daha önceden bir programlama dili bilen yada sistem deneyimi script deneyimi olan birinin bu parametreleri çabuk keşfetmesinin dışında.

Bu cümlemede takılmayın powershell öğrenmek için daha önceden bir dil biliyor olmanız gerekmez. Sadece bilenler için bir avantaj teşkil eder o kadar. Powershell öğrenmek için öncelikli istemeniz sonrasın dada CMD.exe komut satırında cls, dir komutlarını sadece bir kez yapmış olmanız yeterlidir. 🙂

Microsoft sistem mühendisi ekibi powershell de her şeyi düşünmek durumunda olduğu için en dip parametre ve detaylara kadar derine girmişler ama bizlerin sistem yönetiminde bunlardan birçoğuna ihtiyacımız olmayacak zaten olması durumunda da bu parametreleri keşfediyor olacağız. Bu makalenin de tam olarak konusu bu “Ezberleme Keşfet!!!”

Şimdi Get-Command kullanımı ile ilgili olarak birkaç örnek görelim.

Get-Command Örnekleri;

C:\>Get-Command

Active Powershell oturumumuzda tanımlı tüm modüllerdeki komutları listeler

*Active powershell oturumu demek powershell ikon unuzu çift tıklayıp çalıştırdığınızda Size özel olan profilininiz ve o profile çalışırken eklediğini moduller i de kapsayan bir oturum demektir. Profilinizdeki moduller her powershell çalıştırmanız da yüklenirken sonradan ekledik leriniz bir sonraki powershell çalıştırmanız da kaybolacaktır. Temel derslerde bu detaydan bahsedilmeyecek tir.

Siz şimdilik detaylara takılmayın

C:\> Get-Command  *

Get-Command ‘ı çalıştırdığınızda gelen sonuçlara ek olarak çalıştırılabilir .exe dosyaları da listelenecek tir. Bildiğiniz üzere powershell içerisinden cmd.exe de olduğu gibi uygulamaların .exe dosyaları çalıştırılabilir. Yani powershell içerisinden

C:\>notepad.exe komut satırı girilebilir.

Bu arada  ‘*’  joker karakterleri powershell içerisinden kullanılabiliyor. Özetle ‘*’ joker karakteri herşey anlamına geliyor.

C:\> Get-Command *voke*

Komutu ‘nove’ nin başında ne olursa olsun ve de sonunda ne olursa olsun anlamına gelmektedir.  Komutun çıktısı aşağıdaki gibidir.

Snap_2017.09.28 17.31.09_004

Get-Command -Module [module name]

Bu örneğimizde get-command ın module parametresini kullanarak bir modüle içerisindeki komutları görebiliyoruz. Get-command komutunu çalıştırdığımızda bütün komutlar listeleniyor demiştik şöyle bir düzeltme yapalım tanımlı bütün modüllerdeki komutlar listeleniyor.

Siz  C:\>  Get-Command -Module PSScheduledJob 

yaptığınızda  sadece PSScheduledJob modülü içerisinde bulunan komutları  listeleyebilir siniz.

Snap_2017.09.28 17.33.13_005

 

Tam tersinide yapabilirsiniz.

C:\> get-command -name write-warning

komutu ile ismi write-warning olan komut ile ilgili bilgi alabilirsiniz.

Snap_2017.09.28 17.35.10_006

Çok faydalı bir örnekle devam ediyoruz.

C:\> Get-Command -ParameterName *Auth*

İçerisinde Auth kelimesi geçen parametreye sahip tüm komutları listeler. Bu örneği hiçbirzaman unutmayınız ilerde çok ihtiyacınız olacak. Örneğin “computername” parametresi alan komutlar hangisi sorusunun cevabını bu şekilde alabilirsiniz.

Komutları farklı sonuçlar verecektir. * joker karakteri ile girilen komutta powershell komutlarının yanında powershell içerisinde çalıştırılabilecek *.exe dosyalar da listelenecektir.

Arkadaşlar get-command ile ilgili olarak powershelli keşfetme adına birçok güzel örneklerde mevcut fakat biz şu an temel dersimizi yaptığımız için sizi komutlar dizisi içerisinde boğmak istemiyorum. Zaman içerisinde bu komuta hangi parametreleri nasıl gireceğiniz * joker karakterini nasıl kullanacağınızı kendiliğinden öğreneceksiniz.

Powershellde komutların Verb-Noun mantığında olduğunu söylemiştik. Şimdi yeni bir örnekle devam edelim.

C:\>Get-Command -verb start

Komutu geçerli oturumdaki komutlardan ‘Verb’ kısmı start olanları listeler.

Snap_2017.09.28 17.37.09_007

Aynı şekilde;

C:\>Get-Command -noun service

Komutuda noun kısmı service olan komutları listeler. Diğer benzer örnekler

C:\>Get-Command -Noun Process

C:\>Get-Command -Noun Proc*

Get-Command ile ilgili olarak burada keşfedeceğiniz komutların herbirinin bir aliası vardır. Bu aliaslar komutların uzun ifadeler yerine kısa yazılarak kullanılmasını sağlar. Örneğin “get-childitem” komutu dosya ve klasörleri listelemeye yarar. Yazılması uzun olduğu için bu komutun aliası yani takma adı olan “dir” ifadesini kullandığınızdada aynı sonuçları elde edeceksiniz. Ben sizlere şu aşamada asla alias kullanmanızı tavsiye etmiyorum. Komutları uzun isimleri ile öğrenirseniz powershelli daha çabuk keşfedebilirsiniz ayrıca powershell de komutun birkaç harfini yazıp “tab” tuşunua bastığınızda otomatik tamamlama devreye girecek ve her bir basmanızda size lazım olacak komutu gösterecektir. Bu şekilde kullanmanızı tavsiye ederim. Ne zaman alias kullanacağınız zaman içerisinde kendiliğinden oluşacaktır.  Bu nedenle Get-Alias konusuna hiç girmeyeceğiz.

Aşağıdaki tabloda kullanılan bazı komutların kısaca görevleri  verilmiştir.

Powershel(Cmdlet) Powershell(alias) Görevi
 Set-Location  cd,chdir Dizin Değiştirir.
 Clear-Host  cls, clear Ekranı Temizler.
 Copy-Item  cpi, copy, cp Dosya ve Dizin Kopyalar.
 Get-Help  help, man Yardım Görüntüler.
 Get-Childitem  gci, dir, ls Dizin İçeriğini Görüntüler.
 Get-Content  gc, type, cat Dosyaların İçeriğini  Görüntüler.

Bir makalemizin daha sonuna geldik. Bir sonraki makalemizde Get-Help komutu ile Powershell i keşfetmeye devam edeceğiz.

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