Windows PowerShell Scripting

PowerShell Nedir ?

PowerShell, Windows işletim sisteminin Windows7 ile geliştirip piyasaya sürdüğü, Unix tabanlı işletimi sistemlerinde bash yapısına benzer, Cmdlet* ler ile yönetilen .Net yazılımını destekleyen bir programlama dilidir. PowerShell sistem içerisinde pratik işlemleri yapmayı sağlayan, genelde sistem yöneticileri tarafından oldukça rağbet gören bir programlama dilidir.

[*]PowerShell’in sahip olduğu komulara verilen isim.

PowerShell Kullanımı

Windows ortamında Win + R kombinasyonu ile Run aracını açıp powershell yazdıktan sonra PowerShell arayüzünü açıyoruz.

PowerShell Arayüzü

Bu işlemi yaptıktan sonra Cmdlet’leri tanıyıp uygulayalım.

#Hello PowerShell                  #Yorum Satırı
help [Parametre]                     #Parametre olarak verilen komutun kısa dökümanı

cd [Destination Folder]          #Hedef dizine gider
cd ..                                       #Bulunulan dizinden bir alt dizine gider
ls [Parametre]                       #Bulunulan dizinin içeriğini verir

rmdir [Paramretre]               #RemoveDirectory – Dizin silme
mkdir [Paramretre]              #MakeDirectory – Dizin yaratma

Write-Host [Paramretre]       #Ekrana çıktı gönderme
echo [Paramretre]                #Ekrana çıktı gönderme

Read-Host                           #Veri alma

Değişkenler ve Diziler

[int] $value = 2
$value.GetType()

IsPublic    IsSerial      Name      BaseType
——–       ——–        —-           ——–
True        True           Int32        System.ValueType

Yukarıdaki komutta ilk olarak integer tipinde bir değişken oluşturduk ve ardında hafızaya yükledik.
Yüklenene $value değişkeninin GetType() fonksiyonu yardımı ile genel yapısı hakkında bilgi sahibi olduk.

Hata Sınıfları (Exceptions)

Eğer yukarıdaki komutta tipi önceden belirlenmiş olan değişkene farklı bir tipte değer atamaya çalışırsak
ArgumentTransformationMetadataException hatasını alırız.

Tabii PowerShell ile yazarken değişken tipi belirtmek zorunda değiliz.

Örnek Uygulama

_> $question= Read-Host “PowerShell Nedir ?”
>> PowerShell Nedir ? : Bir Programlama Dilidir.
_> Write-Host $question
>> Bir Programlama Dilidir.

_> $my_array = (“PowerShell”,”Windows”,”Scripting”)

_> Write-Host $my_array
>> PowerShell Windows Scripting

_> Write-Host $my_array[0]
>> PowerShell

_> Write-Host $my_array.Lenght
>> 3

_> $my_array.GetType()

IsPublic    IsSerial    Name      BaseType
——–       ——–       —-           ——–
True        True         Object[]    System.Array

_> $files = Get-ChildItem
_> Write-Host $files
_> #Bulunduğunuz dizin içindeki dosyaların isimlerini $files değişkenine atar.

Değişkeni Sıfırlamak

Yaşam döngüsü biten ve artık kullanılmayacak olan değişkenlerin içerisini
boşaltmak için sistem ile gelen $null değişkenini kullanıyoruz.

_> $my_array = $null
_> echo $my_array
>>
_> #Bize boş bir çıktı verecektir.

Dosya Okuma ve Yazma İşlemleri

Terminal üzerinde pratik ve hızlı bir şekilde dosyalar arasında gezinmek kadar onları taşımak,
kopyalamak,silmek, okumak ve yazmakta oldukça önemlidir.

_> echo “New file in to …” > new_file.txt
_> Get_Content new_file.txt
>> New file in to …
_> #Alınan bu çıktı sayesinde dosyayı başarılı bir şekilde yazıp okuduğumuz anlamına geliyor

Burada echo komutuna alternatif olarak Out-File komutunuda kullanabiliriz. Fakat Out-File komutu sadece dosya yaratmamızı sağlayacaktır. İçerisine yazmak için yine echo kullanacağız.

Eğer > (büyüktür) işaretini bir adet kullanırsak dosyanın içinde ne varsa silip yeni değeri ekler. Dosyanın sonuna ekleme yapmak için >> işaretini kullanmamız yeterli olacaktır.

Scripting

PowerShell’in çalıştırılabilir dosya uzantısı *.ps1 dir. Bu nedenle aşağıdaki komutları bir text editor ile açıp gerekli uzantı şeklinde kaydettikten sonra scripti çalışabilir hale getirebiliriz.

#This comment row

$name = Read-Host “What is your name ?”

$dateNow = Get-Date

$currentDir = pwd

Write-Host “$name – $dateNow – $currentDir “

Scripti çalıştırmak için PowerShell arayüzüne girdikten sonra my_script.ps1 yazmak yeterli olacaktır. Eğer yazılan script çalışmaz ise gerekli çalıştırma izni verilmemiştir. İzinleri vermek için PowerShell arayüzünü yönetici olarak çalıştırdıktan sonra aşağıdaki komutu çalıştırmak yeterli olacaktır.

Set-ExecutionPolicy RemoteSigned

Koşul İfadeleri ve Döngüler

Her programlama dilinde olduğu gibi PowerShell’de de  döngüler ve koşullu ifadeler kullanılmaktadır. Bunların avantajlarından bahsetmeye gerek yok 🙂 . Kısaca döngülerin ve koşulların nasıl oluşturulduğuna bakalım.

Koşul İfadesi (if statement)

 $var1 = 2

$var2 = 5

if ($var1 > $var2){

Write-Host “Değer 1 = $var1 daha büyük “

}else{

Write-Host “Değer 2 = $var2 daha büyük “

}

For Döngüsü (for statement)

for ([int] $i = 0; $i -lt 10; $i = $i + 1){

Write-Host “i’nin değeri $i”

}

#-lt , -ge, -eq mantıksal operatörlerdir. -lt (<), -ge(>) ve -eq(==) anlamında kullanılmaktadır.

 

Son olarak scripti daha verimli, hatasız ve hızlı yazabilmek için PowerShell ISE (Integrated Scripting Environment) kullanılmaktadır. Bu ISE sayesinde yazılan scripti debug edebilir, syntax (yazım) hatalarını engelleyebilir ve helper sayesinde tüm kodların ne işe yaradığını ve detaylarını öğrenebilirsiniz.

PS scriptine bir örnek: Makinaya bağlı olan tüm cdromların kapaklarını açmaktadır.

param( [string] $help )

if ( $help -eq "" ) {
	if ( $HOME[0] -eq "/" ) {
		# Linux
		eject
	} else {
		# Windows
		$colCDROMs = ( new-object -COM WMPlayer.OCX.7 ).cdromCollection
		for ( $i = 0; $i -lt $colCDROMs.count ; $i++ ) { $colCDROMs.Item( $i ).eject( ) }
	}
}
else {
	write-host
	write-host "CDEject.ps1, Version 1.01"
	write-host "Eject all CDROMs"
	write-host
	write-host "Requires Windows Media Player in Windows."
	Write-Host "Uses native `"eject`" command in Linux."
	write-host
	
}


Kaynaklar

[1] https://www.varonis.com/blog/windows-powershell-tutorials

[2] https://blog.netwrix.com/2018/02/21/windows-powershell-scripting-tutorial-for-beginners

[3] https://www.czerno.com