PowerShell Uygulamalı Eğitimler 2 (Orta)

LAB 1  (Gelişmiş Filtreleme ve CMD teknikleri)


Görev 1 : C:\Windows\System32 klasörü altında bulunan uzantısı .dll olan dosyaları listeleme

Çözüm : dir C:\Windows\System32 -filter *.dll veya dir yerine get-childitem komutunu kullanabiliriz.


Görev 2 : Sistemde bulunan volume lerin freespace özelliklerini listeleme

Çözüm :  

Ashampoo_Snap_8 Ekim 2018 Pazartesi_17h55m57s_003_


Görev 3 : Sistemde çalışan proses leri .html dosya formatında kaydetme

Çözüm : Get-Process |Convertto-Html -head “Running Process” |Out-File c:\temp\process.html

Yeni Bit Eşlem Resmi


Görev 4 : Sistemde çalışan prosesslerden aynı olanları bir kayıt olarak gösterecek şekilde gösterme.

Çözüm :  Get-Process |Select-Object  name -unique

Get-Process tek başına çalıştırıldığında birden çok alanı listeleyecek şekilde bir çıktıya sahiptir aynı zamanda svchost gibi tek bir prosess altında farklı işlemleride tekrarlı birşekilde listeleyecektir Select-Object name ile prosesslerin sadece isimlerini -unique parametresi ilede tekrar eden işlemleri tekbir satırda gösterecek şekilde bir kullanıma sahiptir.


Görev 5 : Sistemde bulunan volume (partition) lerin boş alanlarını listeleyen komut dizilimi

Çözüm : 

Ashampoo_Snap_9 Ekim 2018 Salı_14h11m02s_003_.png


LAB 2  (NESNELERDEN YARARLANMA)


Görev 1 : C:\temp\text.txt dosyasının içeriğindeki her bir satırın boşluklarını silme

Çözüm : Örneğimizden yola çıkarak elimizde bir .txt dosyası olduğunu ve bu dosyanın satır satır verilerden oluştuğunu düşünelim ve her bir satırın sağında ve solunda boşluklar olduğunu düşünelim. Buna göre;

get-content c:\temp\text.txt |Foreach-Object {$_.Trim()}

Ashampoo_Snap_9 Ekim 2018 Salı_14h18m52s_004_.png


Görev 2 : C:\temp\text.txt dosyası içerisinde bulunan satırları büyük harfe çevirip satırın içerisinde geçen “X” karakterlerini “Z” olarak değiştirme.

Çözüm :  get-content c:\temp\text.txt |Foreach-Object {$_.ToUpper().Replace(“X”,”Z”)}


Görev 3 : C:\temp\text.txt dosyası içerisinde bulunan her bir satır içerisinde bulunan “x” ifadesinin sıra numarasını görüntüleme

Çözüm : get-content c:\temp\text.txt |Foreach-Object {$_.IndexOf(“x”)}

Örneğimizde “x” karakterinin sıra numarasını gösterir. Serverx01 için “x” in konumu 7 dir. “S” karakterinin sıranumarası 0 dır.


Görev 4 : Güncel tarihi bir değişkende saklama.

Çözüm : 

$d=get-date   #güncel tarihi $d değişkeninde saklar.

$d.AddYears(-4).ToFileTime  #$d tarih zaman değişkeninde 4 yılı çıkarır yani 4 yıl gerideki  tarihi gösterecek şekilde bir değer üretir. Ürettiği ifadeyi .ToFiletime ile tarihsel ifadeye dönüştürür.


Görev 5 : Bir önceki örnekteki tarih değişkeninin ifadesinden 4 yıl çıkarma.

Çözüm : 

$d.AddYears(-4).ToFileTime  #$d tarih zaman değişkeninde 4 yılı çıkarır yani 4 yıl gerideki  tarihi gösterecek şekilde bir değer üretir. Ürettiği ifadeyi .ToFiletime ile tarihsel ifadeye dönüştürür.


LAB 3  (HATA YAKALAMA)


Görev 1 : Olmayan bir klasör için get-childitem komutu çalıştırıldığında hatayı yakalama 

Çözüm : Genelde bir komutun parametrelerini yanlış kullandığımızda yada parametrelerin değerlerini olmayan birşeylere atadığımızda hatalar alırız. Bu hatalar konsolda kırmızı renkte ve detaylı bilgiler içeren hatalardır ve bu hatalar oluşmadan hataları yakalamak yada kullanıcıya göstermemek isteriz bu tür durumda try {} catch{} diye adlandırdığımız dene ve yakala mantığı altında bir blok yapısı kullanırız. Örneğin; get-childitem -path c:\olmayanklasör komutunu verdiğimizde doğal olaraktan böyle bir path olmadığına dair bir hata bildirimi alırız. Bu hatayı powershellden önce yakalayıp kontrol altına alabiliriz.  Ekran görüntüsünü incelediğimizde 1 numaralı durum varsayılan durumdur. 2 numaralı durum hatanın oluşması durumunda çalışması gereken kodları catch {} bloğu içerisinde kontrol altına alabiliyor. try-catch Gelişmiş scriptler yazarken olmazsa olmaz blok yapıları arasındadır.

Ashampoo_Snap_9 Ekim 2018 Salı_14h49m08s_006_


LAB 4  (BASİT FONKSİYONLAR)


Görev 1 : Get-WmiObject komutunu kullanarak parametre olarak verilen bir bilgisayarın İşletim sisteminin buildnumber ve servicepackmajor versiyonunu öğrenme

Çözüm : Bunun için iki adet fonksiyon yazarız bir tanesi ilgili makinanın çalışır durumda olduğunu öğrenmek için ping-computer fonskiyonu. Bu fonksiyon kendisine parametre olarak verilen bilgisayar ismini alıp ping atar ping başarılı ise $true başarısız ise $false değerini döndürür.

Pingin başarılı olması durumunda Get-OSInfo fonksiyonu kendisine verilen bilgisayar ismi ve FLAG değişkenini alıp ilgili bilgisayarın FLAG değerine göre buildnumber veya servicepackmajor versiyon değerini döndürür.

New-Variable FLAG_BUILD 0 -Option Constant
New-Variable FLAG_SPVER 1 -Option Constant

function Ping-Computer($computer) {
$wmi=Get-WmiObject -Query “SELECT * FROM Win32_PingStatus WHERE Address=’$computer'”

if($wmi.statuscode -eq 0) {
return $true
}
else{
return $false
}
}

function Get-OSInfo ($computer,$flag){
$wmi=Get-WmiObject Win32_OperatingSystem -ComputerName $computer
foreach($result in $wmi) {
switch ($flag){
0{$result.buildnumber;break}
1{$result.servicepackmajorversion;break}
}
}
}

$computer=”localhost”
if(Ping-Computer $computer){
Get-OSInfo $computer $FLAG_BUILD
Get-OSInfo $computer $flag_SPVER
}


LAB 5  (REGULAR EXPRESSİONS)


Görev 1 : \\Server2\Share\Folder\File ifadesini içeren deyimi yazalım

Çözüm : ^\\\\\w*\\\w*


Görev 2 : firstname.lastname@company.com ifadesini içeren deyimi yazalım

Çözüm : ^\w*\.\w*@company\.com$


Görev 3 :  lastname,firstname ifadesini içeren deyimi yazalım

Çözüm : ^\w*,\w*$


Görev 4 : MM/DD/YYYY tarih formatındaki ifadeyi içere regular expressions formatını yazalım

Çözüm : ^\d{2}/\d{2}/\d{4}$


Şimdilik bu kadar örnekleri uygulamayı kendinize göre parametreleri değiştirerek farklı sonuçlar üretmeyi unutmayın. Bir Sonraki makalemde görüşmek üzere hoşcakalın.

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