PowerShell Uygulamalı Eğitimler 1 (Temel)

LAB 1  (SİSTEMDE GEZİNME  UYGULAMALARI)


Görev 1 : C:\Program Files klasöründeki dosya ve klasörlerin listelenmesi

Çözüm : Eski Cmd alışkanlıklarımızdan Dir komutu bu işi yapabilir. Powershell için get-childitem komutu ile bu işlemi yapabiliriz. Aynı zamanda dir komutu powershell de get-childitem komutunun aliasıdır yani takma adıdır get-childitem yerine dir komutunuda kullanabilirsiniz.

Get-ChildItem -path ‘C:\Program Files\’ -Recurse

-path parametresi ile ilgili path belirtili path ismi uzun ve aralarında boşluk ifadeleri içeriyorsa tırnak işaretleri içerisinde verilir.

-recurse parametresi ilgili klasör ve alt klasörleride listeleyecek şekilde çalışır kısaca -r ifadeside kullanılabilir.


Görev 2 :  Registry üzerinde HKEY_CURRENT_USER hive inin altındaki SOFTWARE alt anahtarını listeleme

Çözüm : Hatırlarsanız registry anahtarlarını da yine aynı şekilde get-childitem komutu ile listeliyorduk. HKCU Kısaltması da HKEY_CURRENT_USER anahtarına karşılık gelmektedir.

get-childitem -path HKCU:\SOFTWARE -recurse

Veya

Cd HKCU:

Cd Software

dir -r

komutlarını sırayla kullanırız.


Görev 3 : Systemroot çevre değişkeninin içeriğini görüntüleme

Çözüm : Environment dediğimiz çevre değişkenleride File system gibi bir store da depolanırlar. Nasıl ki dosyalar disk üzerinde bir volume yada partition gibi bir store da tutuluyorsa. Değişkenler için de benzer durum geçerlidir.  Get-PsDrive komutu bu store ları görmeye yarar. Şekilde sarı ile belirtilen alanda store değişkenleri saklanır.

Yeni Bit Eşlem Resmi

Cd env:  komutu ile ilgili store a girilir. Mantık olarak cd c:\windows klasörüne girmekten hiçbir farkı yoktur. Dosya cd c:\windows komutu ile windows klasörüne girip dir yaptıktan sonra dosya ve klasörleri nasıl görüyorsanız cd env: yapıp dir komutunu verdikten sonrada env: storo unda bulunan değişkenleri ve içeriklerini görebilirsiniz.

Ashampoo_Snap_2 Ekim 2018 Salı_15h55m54s_012_

systemroot değişkeninin içeriğini görmek için alternatif bir yöntemde $env:systemroot  komutunu girmektir.

Ashampoo_Snap_2 Ekim 2018 Salı_15h50m21s_009_

 


Görev 4 : HKEY_CURRENT_USER Registry hive i içinde SOFTWARE Anahtarının altındaki  INTEL anahtarını  DELL anahtarının içine kopyalayalım

Çözüm : Bildiğimiz üzere Registry de c: gibi env: gibi get-psdrive komutu ile detaylarını görebileceğimiz bir store du.

Cd HKCU:\software komutu ile ilgili anahtarın içine girilir.

Copy-Item INTEL DELL komutu ile intel anahtarını dell anahtarının içine kopyalar

Dir ve cd komutu kullanarak anahtarlar içinde dolaşıp yaptığımız işlemlerin sonuçlarını inceleyebiliriz.

NOT: INTEL Ve DELL anahtarlarının daha önceden varoldukları kabul edilmiştir.


Görev 5 :  HKEY_CURRENT_USER Registry hive i içinde SOFTWARE Anahtarının altındaki  DENEME  anahtarının silinmesi

Çözüm : Bildiğimiz üzere Registry de c: gibi env: gibi get-psdrive komutu ile detaylarını görebileceğimiz bir store du. Cd ve dir komutlarını kullanarak registry kayıtları içerisinde dolaşabiliyorduk.

Bunun için ilk olarak

Cd HKCU:\  komutu ile registryda ilgili hive in içerisine giriyoruz.

Cd Software komutu ile Software alt anahtarınını içerisine giriyoruz.

Remove-Item Deneme komutu ile ilgili anahtarı siliyoruz.


LAB 2  (CMDLET LERİ VE PARAMETRELERİ BULMA VE KULLANMA)


Görev 1 : Get-ChildItem komutu ile ilgili yardım alma

Çözüm : help get-childitem veya help gci

Hatırlayalım komutların aynı zamanda alias dediğimiz takma adları vardı. Bunlar uzun komutların kısa ve hızlı yazılması için kullanılıyordu. Örneğin get-childitem yerine dir veya gci kullanılması gibi


Görev 2 : get-childitem ın yerine kullanabileceğimiz kendimizin belirlediği bir alias tanımlayalım.

Çözüm : New-Alias d get-childitem

bundan sonra d komutu get-childitem komutunun yerine geçecek.


Görev 3 : Get-WmiObject komutu hangi pssnapin içerisindedir.

Çözüm : Powershell pssnapin ler .dll dediğimiz dinamik link library dediğimiz kütüphaneleri barındırır. Bu kütüphaneler eklenip çıkarılabilirler. Yardım için help *snappin* komutunu kullanabilirsiniz. Yüklü olanları görmek için Get-PSSnapin komutunu kullanırız. Bir komut için Get-Command Get-WmiObject ile komuta ait pssnapin i görebiliriz. Herhangi bir pssnappin yüklemek içinde  Add-PSSnapin komutu kullanabiliriz.

Pssnapin ler sayesinde powershell imize yeni cmdlet ler dediğimiz komut setleri ekleyerek farklı farklı sistemleri powershell üzerinden yönetebiliriz.

Benzer şekilde module ekleyerek veya çıkararakta komut setleri eklenebilir. Pssnapinlerden farklı olarak module lerde fonksiyonlar,aliaslar,variables ve drive lar tanımlanabilir.

Ashampoo_Snap_3 Ekim 2018 Çarşamba_08h30m24s_015_


Görev 4 : Bir powershell oturumu açtınız ve o oturum boyunca yaptığınız işlemleri girdiğiniz komutları otomatik olarak bir dosyada saklama

Çözüm : Start-Transcript ve Stop-Transcript komutlarını kullanırız. Start-Transcript komutunu verdiğimizde gelen mesajda yapılan işlemlerin text dosyasını tutacak olan txt dosyasının path ini görebiliriz. Sonrasında Stop-Transcript komutunu verip loglama işleminin tamamlanmasını sağlayabiliriz. Bu komutlar sizin o powershell oturumunda yaptığınız işlemleri bir txt dosyasında saklamanızı sağlar.


Görev 5 : Task managerda çalışan calc (hesap makinası)uygulamasını powershell komutları ile kapatma

Çözüm : Stop-Process Calc komutu bu işe yarayacaktır. Hatırlayalım get-process *calc* komutu çalışan işlemler arasında içerisinde isminin içerisinde calc olan prosessleri listeleyecektir

Görev 6 : C:\temp\pclistesi.txt dosyasında bulunan kayıtların ilk 10 satırını görme

Çözüm : Get-Content C:\temp\pclistesi.txt -totalcount 10 komutu ile ilgili txt dosyasındaki ilk 10 kaydı görebiliriz.

-totalcount parametresi toplam alınacak satır sayısını belirtir.

-firtst parametresi baştan kaç kayıt kayıt alınacağını belirtir.

-last parametresi sondan kaç kayıt alınacağını belirtir.


Görev 7 : Sadece tarihi görüntüleme saat dakika saniye bilgisi olmadan

Çözüm : Get-Date -displayhint date


Görev 8 : Security event log üzerinden enson 20 olay kaydını görüntüleme.

Çözüm : Get-EventLog Security -newest 20

veya

get-eventlog -logname security -newest 20


LAB 3  ( PIPELINE ile ÇALIŞMA)


Görev 1 : Get-Service in kullanılabilir özellellikleri ve metodlarını listeleme

Çözüm : Get-Service | Get-Member


Görev 2 : Sistemde çalışan prosesleri bir txt dosyasına çıkarma

Çözüm : Get-Process | Out-File c:\temp\process.txt

get-process komutu ile konsolda gördüklerinizi pipeline üzerinden out-file parametresi ile belirtilen path e çıkarır.


Görev 3 : Sistemde çalışan tüm servisleri durdurmak istediğimizde hangilerinin başarılı olacağını simüle etme

Çözüm : Get-Service | Stop-Service -whatif


Görev 4 : Sistemde çalışan tüm servisleri onayımıza istinaden sırayla durdurmak istiyoruz.

Çözüm : Get-Service | Stop-Service -confirm


Görev 5 : Bir txt dosyasının içerisinde belirtilen path ve dosyaları listeleyip c:\temp\test klasörüne kopyalayan komut seti

Çözüm : Get-Content C:\temp\files.txt | Copy-Item -dest C:\temp\test


LAB 4  ( CORE CMDLED LERİ KULLANMA)

Görev 1 : Sistemde çalışan prosesslerin properties ve metodlarını görme kısaca prosesslerle ilgili ne gibi işlemler yapılabildiğini görme.

Çözüm : Get-Process | Get-Member


Görev 2 : System eventlogları nın properties ve metodlarını görme kısaca system eventlogları ile neler yapılabildiğini görme

Çözüm : Get-Eventlog System | Get-Member


Görev 3 : Sistemde çalışan prosesslerden ilk 10 tanesini “Handles” özelliğine göre sıralı görme

Çözüm : Get-Process | Sort-Object Handles -desc | Select-Object -first 10


Görev 4 : Sistemde çalışan servisleri “status” özelliklerine göre gruplanmış şekilde görme

Çözüm : Get-Service | Group-Object Status


Görev 5 : Sistemdeki servislerin sayıca adet bilgilerini görme

Çözüm : Get-Service | Measure-Object

Ashampoo_Snap_3 Ekim 2018 Çarşamba_17h47m00s_024_


Görev 6 : Sistemdeki çalışan prosesslerin “Handles” özelliğinin ortalama minimum ve maksimum değerlerini görme

Çözüm : Get-Process | Measure-Object Handles -average -min -max


Görev 7 : Security eventlog larını “EventID” ve “TimeGenerated” özelliklerini gösterecek şekilde listeleme

Çözüm : Get-EventLog Security | Select EventID,TimeGenerated


LAB 5  ( GÜVENLİK ÖZELLİKLERİNİ KULLANMA)


Görev 1 : İmzasız local scriptlerin çalışması için gerekli komut

Çözüm : Set-ExecutionPolicy RemoteSigned

Bildiğimiz üzere powershell de iki türlü kullanım vardı. Birtanesi komu yada pipeline kullanarak oluşturduğumuz uzun komut setleri ni çaluştırmak diğer kullanımıda komutların bir .ps1 dosyasında batch olarak yazılmasıydı. Script dosyalarının çalışması için birkereye mahsus powershell e script dosyalarını çalıştırırken uyması gereken kuralları öğretmemiz gerekiyordu.


Görev 2 : c:\temp\test.ps1 scriptini çalıştıran komut

Çözüm : C:\temp>./test


Görev 3 : Bir script üzerindeki imzayı görme ve bir scripte imza girme

Çözüm :

Get-AuthenticodeSignature

komutu ile bir script üzerindeki varsa imzaları görebiliyoruz. Örneğin;

Ashampoo_Snap_4 Ekim 2018 Perşembe_09h16m04s_028_

Set-AuthenticodeSignature komutu ile de bir scripti imzalayabilirsiniz.


Görev 4 : Kullanıcının powershell profili nerede?

Çözüm : Varsayılan olarak kullanıcının aşağıda belirtilen folderda profile dosyası vardır. Bu dosya aynı zamanda powershell i başlattığınızda çalışacak komutları sıralı bir şekilde çalıştırır.

C:\Users\myusername\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1


Görev 5 : Lokal administratorun bir değişken üzerinde tutulması

Çözüm : $cred=Get-Credential Administrator komutu ile kullanıcı adı ve şifresini kriptolu bir değişken üzerinde tutabilirsiniz. Sonrasında bu değişkeni authentication isteyen bir komutta kullanabilir siniz Örneğin; get-adcomputer -credential $cred şeklindeki bir komut bir önceki komutta kullandığınız credential ı kullanacaktır.


LAB 6  ( POWERSHELL DE WMI KULLANMA)

Görev 1: Aşağıdaki sınıfların wmi tanımları nelerdir?

Windows servisleri, Mantıksal sürücüler? , Network konfigürasyon ayarları? , Çalışan işlemler?, Windows işletim sistemi?

Çözüm : 

Win32_Service

Win32_LogicalDisk

Win32_NetworkAdapterConfiguration

Win32_OperatingSystem


Görev 2: Local bilgisayardaki mantıksal diskleri görme

Çözüm : Get-WMIObject Win32_LogicalDisk


Görev 3 : Local bilgisayardaki mantıksal diskleri “drivetype” özelliğine göre sıralama

Çözüm : Get-WMIObject Win32_LogicalDisk | Sort-Object DriveType


Görev 4: Local bilgisayarda çalışan servisleri görüntüleme

Çözüm : Get-WMIObject Win32_Service -filter “State=’Running'”


Görev 5 : Get-WMIObject Win32_Service -filter “State=’Running'” | Select Name,StartMode

Çözüm : Local bilgisayarda çalışan servislerin “Name” ve “StartMode” başlıkları altında görüntüleme


Görev 6 : Local bilgisayarda mantıksal disklerde sorgulama yaparak 3 numaralı diski görüntüleme

Çözüm : Get-WMIObject -query “SELECT * FROM Win32_LogicalDisk WHERE DriveType=3”


Görev 7 : Local bilgisayarda işletim sisteminin “BuildNumber”,”ServicePackMajorVersion” özelliklerini görüntüleme

Çözüm : Get-WMIObject -query “SELECT  BuildNumber,ServicePackMajorVersion FROM Win32_OperatingSystem”


LAB 7  ( FİLTRELEME VE OPERATÖRLERİ PIPELENI İLE KULLANMA)


Görev 1:

Çözüm :  Get-Process | Where-Object {$_.Responding } | Sort-Object Name


Görev 2 :  Tüm Servislerden “StartMode” u auto “State” i Running olanları listeleme

Çözüm : Get-WMIObject Win32_Service | Where-Object {$_.StartMode -eq “Auto” -and $_.State -ne “Running”}


Görev 3 : Görev 2 ye ek olarak çıktının html formatında bir dosyaya .html uzantı ile kaydedilmesi

Çözüm : Get-WMIObject Win32_Service | Where-Object {$_.StartMode -eq “Auto” -and $_.State -ne “Running” } | ConvertTo-HTML | Out-File C:\temp\test\notrunning.html


Görev 4: Sistemde çalışan işlemlerden notepad olanları bulup kapatma

Çözüm : Get-WMIObject Win32_Process | Where-Object {$_.Name -eq “Notepad.exe”} | ForEach-Object {$_.Terminate()}


Görev 5 : C:\temp pathinde bulunan computers.txt dosyasındaki bilgisayarların mantıksal disklerini listeleme

Çözüm : Get-Content C:\temp\computers.txt |ForEach-Object {Get-WMIObject Win32_LogicalDisk -computername $_ }

computers.txt dosyasında bilgisayar isimlerinin alt alta yazıldığı düşünülerek yukardaki komut uygulanabilir.


LAB 8  ( CMDLET LERLE ÇALIŞMA)


Görev 1 : Aliasları görüntüleme

Çözüm : Aliaslar komutların takma adlarıdır yani get-childitem komutunu uzun uzun yazmak yerine dir yada ls yazmak gibi burada dir yada ls get-childitem komutunun aliası yani takma adıdır. Uzun komutlara yeni aliaslar atayıp kullanılabilir.

ilgili komut Get-Alias


Görev 2 : Sistemdeki işlemleri  “Responging” ve “Name” özelliğine göre sıralayıp tablo formatında  Name,ID ve Responding alanlarını listeleme

Çözüm : Get-Process | Sort-Object Responding,Name | Format-Table Name,ID,Responding


Görev 3 : Sistemdeki sevislerden çalışır durumda olanları Format Wide şeklinde gösterme

Çözüm :  Get-Service |Where-Object {$_.Status -eq “Running” } |Format-Wide Name


Görev 4 : Tüm servisleri liste formatında tüm özellikleri gösterecek şekilde listeleme

Çözüm : Get-Service |Format-List *


Görev 5 : İsmi klavyeden alıp alınan metnin arkaplanını siyah ön rengini kırmızı yapacak şekilde çıkartacak komut

Çözüm : Read-Host “İsminizi giriniz ” | Write-Host -foreground red -backgroundcolor black


Görev 6 : Write-Host ve Write-Output arasındaki fark

Çözüm : Write-Host komutların çıktılarını konsola yani ekrana yazdırır. Write-Output komutların çıktılarını ekrana yazdırır ek olarak çıktılar başka komutlara pipeline ile geçilebilir yani çıktılar sadece görüntülemekle kalmaz kullanılabilir.


Görev 7 : Bir komutun alabileceği parametreleri öğrenme

Çözüm : Powershell oturumunda tire işaretinden sonra CTRL+Space tuşu ile alabileceği parametreler görüntülenebilir. Ayrıca Powershell ISE de tire işaretinden sonra açılan liste kullanılabilecek paramatreleri gösterir.


LAB 9  ( NESNELER,DEĞİŞKENLER,DİZİLER LE ÇALIŞMA)


Görev 1 : String tipli bir ifadenin methot ve özelliklerini görme

Çözüm : “x” | gm


Görev 2 :  String tipinde bir değişken tanımlama ve 12345 değerini verme

Çözüm : [string]$var=12345

Hatırlayalım string değişkenlere atanan sayılar string olarak değerlendirilir. Örneğin tc kimlik numarası aslında sayısal değil metinsel bir ifadedir yani matematiksel işlemlere tabi tutulmazlar


Görev 3 : Var isminde bir değişken tanımlama ve değer olarak “Merhaba Dünya” atama. Atanan değişkenin değeri “X” ile başlıyor mu?

Çözüm : 

$var=”Merhaba Dünya” ifadesi $var değişkenine string bir ifade atar

$var.StartsWith(“X”) ifadesi ise $var değişkeninin değeri X ile başlıyor mu ? true yada false ifadesi döner.


Görev 4 : arr isminde bir dizi oluşturma ve üyelerini “one” “two” “three” olacak şekilde verme dizinin üyeleri 4 karakterden küçükse arkaplan yeşil olacak şekilde konsola yazma

Çözüm : $arr=@(“one”,”two”,”three”)

$arr|Where {$_.Length -lt 4 } |Write-Host -foreground green


Görev 5 :  var değişkeni tanımlayıp içeriğine “Merhaba Dünya” atama, var2 değişkeni tanımlayıp içeriğine “Hey” ve var değişkenlerini atama 

Çözüm :  $var=”Merhaba Dünya”

$var2=”Hey, $var”

$var2

Yukardaki komutlardan farklı olarak var2 değişkenine yapılan atamayı tırnak işaretleri içerisinde yaparsak var değişkeni metinsel veri olarak değerlendirilir

$var2=’I say, $var’

$var2


LAB 10  ( GELİŞMİŞ OPERATÖRLER)


Görev 1 : var değişkeninin içerisinde exec ifadesi var mı?

Çözüm : $var -like “*exec*”


Görev 2 :  İsminde “exec” ifadesi olan dosyaları listeleme (Mevcut klasör ve alt klasörlerde de arama)

Çözüm : Get-ChildItem -recurse | Where {$_.FullName -like “*exec*”}


Görev 3 : Bir önceki örneğe ek olarak dosya boyutu 200 byte tan küçük olan dosyaları listeleme

Çözüm : Get-ChildItem -recurse | Where {$_.FullName -like “*exec*” -and $_.Length -lt 200}


Görev 4 : Boyutu 100 mb dan büyük olan dosyaları alt klasörlerle birlikte listeleme

Çözüm : Get-ChildItem -recurse | Where {$_.Length -gt 100MB}


LAB 11  (SCRIPT YAZMA)


Görev 1 : Belirtilen kriterde  Eventlogları listeleme scripti  (Log türü klavyeden girilecek ve en yeni 50 event listelenecek)

Çözüm : 

$log=Read-Host “Hangi log lar listelenece?”
$events=Get-EventLog $log -Newest 50
foreach($event in $events) {
switch ($event.category) {
“(0)” {$color=”Green”}
“(101)” {$color=”Yellow”}
“(103)” {$color=”Red”}
default {$color=”White”}
}
Write-Host $event.timewritten -ForegroundColor $color
}


Görev 2 : Bir fonksiyona bilgisayar ismini parametre olarak verip o bilgisayarın işletim sistemi bilgilerini çekelim.

Çözüm :  Örneğimizde local bilgisayar için OS buildnumber bilgisi çekiliyor.

function Get-OSBuild
param($computer)
$wmi=gwmi win32_operatingsystem -ComputerName $computer
foreach ($os in $wmi) {
write $os.buildnumber
}
}
Get-OSBuild localhost


Ş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