31 Mart 2013 Pazar

Windows PowerShell Programlama Dili 2



    Merhaba arkadaşlar, bir önceki yazımda Windows PowerShell programlama dilinden bahsetmiştim. Bugün aynı konu başlığı altında yazıma devam edeceğim. Bugün sizlere operatörler, koşullu ifadeler, döngüler ve fonksiyonlar  konularını anlatacağım. Bu konuların, programlama dili öğrenirken üzerinde titizlikle durulması gereken konular olduğunu düşünüyorum. Bu yüzden bu konuları tam olarak kavrayabilmeniz size ilerde kolaylık sağlayacaktır. Küçük tavsiyemizden sonra artık başlayabiliriz.


Operatörler


    İlk olarak karşılaştırma operatörleriyle başlayabiliriz. Karşılaştırma operatörleri iki değeri birbirleriyle  karşılaştırmada kullandığımız operatörlerdir. Genellikle koşullu ifadelerde kullanılırlar. Aşağıdaki tabloda bütün karşılaştırma operatörleri yer almaktadır. Operatörlerin PowerShell programlama dilinde kullanımı, değeri, örnek ve çıktısı yer almaktadır.


Operatör
Değeri
Açıklama
Örnek
Sonuç

-eq, -ceq, -ieq

-ne, -cne, -ine

-gt, -ogt, -igt

-ge, -oge, -ige

-lt, -clt, -ilt

-le, -cle, -ile

-contains
-coontains
-icontains

-notcontains
-notcoontains
-inotcontains

=

<> 

> 

>=

< 

<=

Eşittir

Eşit değil

Büyük

Büyük eşit

Küçük

Küçük eşit


“Contains”



“Not Contains”

2 -eq 5

1 -ne 2

1 -gt 2

2 -ge 1.9

1 -lt 2

2 -le 1.9


1,2,3 -contains 1



1,2 -notcontains1

$false

$true

$false

$true

$true

$false


$true



$false

    Diğer bir operatör çeşidi de mantıksal operatörlerdir. Aynı şekilde bu operatörler de genellikle koşullu ifadelerde kullanılırlar. Koşullu ifadeleri anlatırken örneklerle göstereceğim. Mantıksal operatörleri de yukarıdaki gibi tablo halinde göstermek istiyorum.


Operatör
Açıklama
İlk değer
İkinci değer
Sonuç


-and



-or



-xor



-not


Mantıksal VE



Mantıksal VEYA



aynı ise “yanlış”
farklı ise “doğru”


Değil

True
False
False

True
False
False

True
False
True


-

True
True
False

True
True
False

True
True
False


False
True

True
False
False

True
True
False

False
True
True


True
False


Koşullu İfadeler


    Koşullu ifadelerden olan "if" ile bir ifadeyi kontrol eder ve döndürdüğü sonuç doğru ise buna göre işlemler yaparız. Eğer sonuç yanlış ise "else" bloğuna atlar. Bu blokta da yanlış sonuca göre işlemleri yaparız. "Else if" bloğunda ise "else" bloğuna gelene kadar bir takım koşullu işlemleri yaparız.

Örnek 1:
$a = 10 

if ($a -gt 10) 
{
  "$a değeri 10'dan büyüktür"
} 
elseif ($a -eq 10) 
{
  "$a değeri tam olarak 10"
} 
else 
{
  "$a değeri 10'dan küçüktür"
}


Çıktı:
10 değeri tam olarak 10


Örnek 2:

# 1. Örnek
Write-Host " 1. Örnek"
if ((1 -eq 2) -and (1 -eq 1) -or (1 -eq 1)) {
    Write-Host " sonuc doğru if bloğu çalıştı "
} else {
    Write-Host " sonuc yanlış else bloğu çalıştı"
}

#2. Örnek
Write-Host " 2. Örnek"
if ((1 -eq 2) -and ((1 -eq 1) -or (1 -eq 1))) {
    Write-Host " sonuc doğru if bloğu çalıştı "
} 
else {
    Write-Host " sonuc yanlış else bloğu çalıştı "
}


Çıktı:
 1. Örnek
 sonuc doğru if bloğu çalıştı 
 2. Örnek
 sonuc yanlış else bloğu çalıştı 


    Diğer bir koşullu ifademiz "switch/case" 'dir. "Switch/case" yapısı "if/else" yapısına benzer bir yapıdır. "If/else" yapısından farklı olarak, "switch" içindeki değeri "case" değerleriyle karşılaştırırız. Doğru sonucu bulduğumuzda "break" komutuyla çıkarız. "Break" kullanmazsak bütün "case" koşulları kontrol edilir. Aşağıdaki örneği inceleyebilirsiniz.


$a = Read-Host "Lütfen 1. Sayıyı giriniz"
$b = Read-Host "Lütfen 2. Sayıyı giriniz"
$ans = Read-Host "Lütfen Yapılacak aritmetik işlemi seçiniz
1)Toplama
2)Çıkarma
3)Çarpma
4)Bölme "

switch ($ans) {
    1 {
        $result = [int] $a + [int] $b
        Write-Host $sum
            break 
    }
    2 { 
        $result = [int] $a - [int] $b
        Write-Host $result  
            break 
    }   
    3 { 
        $result = [int] $a * [int] $b
        Write-Host $result
               break 
    }
    4 { 
        $result = [int] $a / [int] $b
        Write-Host $result
            break  
    }  
}


Döngüler


    Döngüler, bir işi belirlediğimiz aralıklarda yapan kod bloklarıdır. İlk olarak "while" döngüsüyle başlayalım. "While" döngüsünde koşul olarak döngünün nerede biteceğini veya hangi koşulda biteceğini belirleriz. Windows PowerShell'deki kullanımını aşağıdaki örnekleri inceleyerek görebilirsiniz.


#1 den 10 a kadar sayıları ekrana yazdıran dongu
$a = 1
while($a -le 10){
    Write-Host $a
    $a++
}


Çıktı:
Output:
1
2
3
4
5
6
7
8
9
10


    Bir diğer döngü çeşidimiz ise "for" döngüsüdür. Bu döngü de "while" döngüsü gibidir, fakat söz dizimi (syntax) farklıdır. Döngüyü tanımlarken de koşulumuzu belirleyebiliriz, blok içerisinde de koşulumuzu belirleyebiliriz. Aşağıdaki örnek, bulunduğumuz klasörü tarayarak, klasör içindeki nesnelerin dosya mı klasör mü olduğunu ekrana yazdıran bir döngüdür.



#PS C:\Users\Vahit\Courses> 
$file = Get-ChildItem
for ($i = 0; $i -lt $file.Count; $i++) {
    if (!( Get-Item $file[$i ]).PSIsContainer ) {
        Write-Host $file[$i ].Name "is a file "
    } else {
        Write-Host $file[$i ].Name "is a directory "
    }
}


Çıktı:
Computer Engineering Design is a directory 
Computer Research is a directory 
Documents is a directory 
E-books is a directory 
Example Codes is a directory 
IdeaProjects is a directory 
Information Retrieval is a directory 
Java is a directory 
Web Server is a directory 
almanya2013.zip is a file 
Chip Mart [2013]-LTRG.pdf is a file 
CJ_05_Design.pdf is a file  
javamagazine20130102.pdf is a file 
PcNet Mart [2013]-LTRG.pdf is a file 
thesis.pdf is a file 
Working_with_Image_Files.pdf is a file 


    "Foreach" içinde bulunan dizi ya da nesnenin tüm elamanlarını tarar. Diğer döngülere göre daha sade bir söz dizimi vardır. Aşağıdaki örneği inceleyebilirsiniz.


#1 den 10 a kadar sayılar bir dizi tanımladık
#Dizinin içinde $key ile dolaşarak tüm elemanları ekrana yazdırıyoruz 

$dizi= 1..10
Write-Host "Output:"
foreach ( $key in $dizi ) {
    Write-Host $key
}


Çıktı:
Output:
1
2
3
4
5
6
7
8
9
10


Fonksiyonlar


    Fonksiyonların programlama dillerinde önemi büyüktür. Bir kod bloğunu tekrar kullanmak istiyorsak, o bloğu tekrar yazmak yerine fonksiyon içinde yazabiliriz. Böylece istediğimiz yerde fonksiyonu çağırarak o bloğu kullanabiliriz. Aşağıdaki örnekleri inceleyerek Windows PowerShell'de fonksiyon kullanımını görebilirsiniz.

    İşletim sistemindeki yazılımları, versiyonlarını ve yazılımların kaldırma bilgilerini "Out-GridView" komutu yardımıyla tablo halinde gösteren fonksiyonu ve çıktısını aşağıdaki örnekte görebilirsiniz.


function Get-InstalledSoftware {
  $path = 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\*'
  Get-ItemProperty -path $path |
    Where-Object { $_.DisplayName -ne $null } |
    Select-Object DisplayName, DisplayVersion, UninstallString |
    Sort-Object DisplayName
}

Get-InstalledSoftware




    Aşağıdaki örnekte, iki tane parametre alan ve aldığı parametrelerle bir takım işlemler yapan fonksiyonu inceleyebilirsiniz. Fonksiyonu çalıştırma esnasında önce fonksiyonu ardından birer boşluk bırakarak parametreleri yazıp çalıştırıyoruz.



#aldığı sayılarla 4 işlem yapan fonksiyon
Write-Host "Output:"
function aritmatic_operations($a, $b) {
   Write-Host "$a plus $b is equal to" ($a + $b) 
   Write-Host "$a minus $b is equal to" ($a - $b)
   Write-Host "$a mult $b is equal to" ($a * $b)
   Write-Host "$a divide $b is equal to" ($a / $b)
}
aritmatic_operations 20 4


Çıktı:
Output:
20 plus 4 is equal to 24
20 minus 4 is equal to 16
20 mult 4 is equal to 80
20 divide 4 is equal to 5


    Bu hafta anlatacaklarım bu kadar. Haftaya görüşürüz.


Referanslar:

Kitap: "Master-PowerShell with Dr. Tobias Weltner"
Kitap: "PowerShell tutorial, Eric Hjelmas"

2 yorum:

  1. Galiba powershell hakkında türkçe olarak bulduğum en iyi site. Keyifle makaleleri okuyacağım, teşekkürler.

    YanıtlaSil
  2. switch-case'deki toplama bloğunda, $sum yerine $result yazılmadığı için o blok çalışmıyor. İyi günler

    YanıtlaSil