"Enter"a basıp içeriğe geçin

PowerShell’e Giriş

PowerShell’e Giriş

Powershell nedir?

PowerShell, Microsoft tarafından geliştirilen ve .NET Framework üzerinde çalışan bir komut satırı kabuğu ve betik dili sistemidir. Windows PowerShell öncelikle sistem yöneticileri tarafından kullanılır ve hem yerel hem de uzak bilgisayarlarda karmaşık ve otomatikleştirilmiş görevleri gerçekleştirmek için kullanılır.

PowerShell, genel amaçlı programlama dillerinde bulunan birçok özelliği içerir. Bunlar değişkenler, diziler, döngüler ve koşullu ifadeler (if-then-else blokları) gibi yapıları içerir. PowerShell ayrıca dosya işlemleri, sistem ve ağ yönetimi işlemleri gibi birçok görevi kolaylaştıran cmdlet adı verilen yerleşik komutları da içerir.

PowerShell hem etkileşimli bir kabuk (kullanıcıdan komutları alır ve sonuçları görüntüler) hem de komut dosyalarını yazmak ve yürütmek için bir dil (otomatik görevler) olarak kullanılabilir.

PowerShell’in bir diğer güçlü özelliği de çıktıları ve girdileri nesne odaklı bir şekilde işleyebilme yeteneğidir. Bu, çıktıları ve girdileri yalnızca metin olarak değil aynı zamanda özellik ve yöntemlere sahip nesneler olarak da işleyebileceği anlamına gelir. Bu özellik, çıktı işleme ve veri işleme yeteneklerini önemli ölçüde genişletir.

Powershell’in avantajları ve kullanım alanları

PowerShell, çıktıyı ve girişi nesne odaklı bir şekilde işler. Bu yetenek, verileri yalnızca metin olarak değil, aynı zamanda özellik ve yöntemlere sahip nesneler olarak da işlemeyi mümkün kılar. Bu şekilde çıktı işleme ve veri işleme yetenekleri önemli ölçüde genişletilir.

PowerShell, komut dosyası oluşturma ve otomatikleştirme için kullanılan gelişmiş bir komut dosyası dili içerir. Bu komut dosyası dili, kullanıcıların karmaşık görevleri otomatikleştirmesine ve tekrarlanan görevleri sık sık gerçekleştirmekten kaçınmasına olanak tanır.

“PowerShell Uzaktan İletişim” özelliği, kullanıcıların uzak bilgisayarları yönetmesine olanak tanır. Bu sayede çok sayıda bilgisayarı yönetmek çok kolay bir iş haline gelir.

PowerShell, dosya işlemleri, sistem ve ağ yönetimi gibi birçok görevi kolaylaştıran geniş bir yerleşik komut kümesine sahiptir. Bu komutlar cmdlet’ler olarak bilinir ve genellikle “Fiil-İsim” biçiminde adlandırılır (örneğin, “Get-Process”).

PowerShell, .NET Framework ile entegredir. Bu özellik, .NET sınıflarının, yöntemlerinin ve özelliklerinin doğrudan PowerShell’den kullanılmasına olanak tanır.

PowerShell Core olarak da bilinen PowerShell 6 ve sonraki sürümleri, Linux ve macOS dahil olmak üzere çeşitli işletim sistemlerinde çalışabilir.

PowerShell’in çeşitli kullanımları vardır. Bunlardan bazıları aşağıdaki gibidir:

  • Sistem yönetimi ve otomasyon
  • Dosya ve dizin işlemleri
  • Kaynak izleme
  • Ağ yönetimi
  • Veritabanı işlemleri
  • Güvenlik ve izin yönetimi
  • Günlük dosyalarının analizi ve işlenmesi
  • Yazılım dağıtım ve yedekleme işlemleri

PowerShell, hem Windows’ta hem de diğer işletim sistemlerinde çok çeşitli görevleri otomatikleştirmeyi ve yönetmeyi kolaylaştırır.

Powershell Ortamını Yükleme

PowerShell, Windows işletim sistemiyle birlikte gelir ve genellikle önceden yüklenir. Ancak Linux ya da macOS işletim sistemi üzerinde son sürümü kullanmak ya da PowerShell kurulumu yapmak istiyorsanız aşağıdaki adımları takip edebilirsiniz.

Windows için PowerShell’i yükleme

PowerShell 5.1, Windows 10 ve Windows Server 2016 ile birlikte gelir. Windows’un daha eski bir sürümünü kullanıyorsanız veya en son sürüm olan PowerShell 7’yi kullanmak istiyorsanız Microsoft’un resmi web sitesinden indirebilirsiniz.

  1. Microsoft’un PowerShell GitHub sayfasına gidin. (https://github.com/PowerShell/PowerShell).
  2. “Yayınlar” bölümüne gidin.
  3. İndirmek istediğiniz sürümü seçin. Genel olarak en son kararlı sürümü seçmek en iyisidir.
  4. İşletim sisteminize uygun indirme bağlantısını seçin. Windows için “.msi” dosyasını indirin.
  5. İndirilen dosyayı çalıştırın ve kurulum sihirbazının talimatlarını izleyin.

Kurulumun ardından “Başlat” butonuna tıklayarak aşağıdaki görselde “1” ( Windows arama çubuğu) olarak işaretlenen alana “PowerShell” yazıp ardından PowerShell konsolunu başlatabilirsiniz. Arama sonuçlarında “2” numaralı alanlardan herhangi birine tıklayabilirsiniz . Kursumuzda zaman zaman PowerShell’i yönetici haklarıyla çalıştırmamız gerekecek, daha sonra uygulamayı yönetici olarak çalıştırmak için “3” numaralı alanı kullanmamız gerekecek.

Linux için PowerShell’i Yükleme

PowerShell, Windows’un yanı sıra Debian, Ubuntu, CentOS, Fedora, openSUSE ve daha birçok Linux dağıtımı için de mevcuttur. Ubuntu’nun kurulum adımları aşağıdadır:

  1. Terminali açın.
  2. Aşağıdaki komutları çalıştırın:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
             
sudo curl -o /etc/apt/sources.list.d/microsoft.list \ https://packages.microsoft.com/config/ubuntu/20.04/prod.list
             
sudo apt-get update 
             
sudo apt-get install -y powershell
             

İlk iki satırda Microsoft repo ve paket anahtarını sistemimize ekliyoruz.

3. satırda sistemimizdeki paket veritabanını güncelliyoruz, böylece sistemimiz yeni eklediğimiz repodan haberdar oluyor.

Ve son olarak PowerShell paketlerini kuruyoruz.

Kurulum tamamlandıktan sonra yeni bir PowerShell oturumu başlatmak için terminale “pwsh” komutunu yazmanız yeterlidir.

MacOS için PowerShell’i yükleme

PowerShell’i macOS’a yüklemek için Homebrew paket yöneticisini kullanabilirsiniz. Homebrew yüklü değilse önce onu yüklemeniz gerekir:

  1. Terminali açın.
  2. Homebrew’u kurmak için aşağıdaki komutu çalıştırın.
  3. Kurulum tamamlandıktan sonra yeni bir PowerShell oturumu başlatmak için terminale ‘pwsh’ komutunu yazın.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
             
brew update
             
brew install --cask powershell
             

Powershell Komutlarının Temelleri

cmdlet’i nedir?

Artık PowerShell’i çalışır durumda tuttuğumuza göre, PowerShell dünyasında işlerin nasıl gittiğine bakmaya başlayabiliriz.

Giriş bölümünde söylediğimiz gibi PowerShell, kullanıcıların bilgisayarları ve ağları yönetmesine olanak tanıyan güçlü bir komut satırı kabuğu ve komut dosyası dili sistemidir. PowerShell, çeşitli sistem yönetimi görevlerini gerçekleştirmek için çok sayıda komut veya “cmdlet” ile birlikte gelir.

Cmdlet’ler genellikle “-VerbNoun” biçiminde adlandırılır ve belirli bir eylemi gerçekleştirmek için kullanılır. Örneğin, “Get-Process” cmdlet’i çalışan tüm işlemlerin bir listesini döndürür, “Stop-Process” belirli bir işlemi durdurur. Daha iyi anlaşılması için standart bir PowerShell kurulumuyla varsayılan olarak gelen temel cmdlet’lere örnekler verelim:

PowerShell konsolunu başlatıp “ get-help cmdlet ”i çalıştırdıktan sonra aşağıdaki çıktıyı görüyoruz:

Powershell Komut Dosyası?

PowerShell, cmdlet’lerin yanı sıra komut dosyalarının oluşturulmasına ve çalıştırılmasına da olanak tanır. PowerShell betiği genellikle bir .ps1 dosyasıdır ve bir dizi cmdlet’i ve diğer PowerShell ifadelerini içerir.

PowerShell, karmaşık görevleri otomatikleştirmek için komut dosyaları oluşturulmasına olanak tanır. PowerShell betiği, .ps1 uzantılı bir dosyada bir dizi PowerShell komutu içerir.

Bir betiği çalıştırmak için betiğin adını ve yolunu .\ ile birlikte kullanabilirsiniz. Örneğin, .\myScript.ps1 komutu geçerli dizinde “myScript.ps1” adlı betiği çalıştırır.

PowerShell betikleri birçok programlama dilinde bulunan değişkenler, döngüler ve koşullu ifadeler gibi özellikleri destekler. Bu, komut dosyalarının karmaşık işlemleri gerçekleştirmesine olanak tanır.

Powershell’deki Veri Türleri

Tüm komut dosyası/programlama dilleri gibi Powershell de bir dizi veri türünü ve değişkeni destekler. PowerShell’in aslında .NET framework’üne doğrudan destek sağladığını, .NET ortamındaki tüm özellikleri PowerShell içerisinde kullanabileceğimizi daha önce belirtmiştik. Bu açıdan bakıldığında PowerShell, .NET tarafından desteklenen tüm veri türlerini desteklemektedir. Gelin günlük hayatımızda çokça kullanacağımız veri türlerine bir göz atalım:

Listede PowerShell için özel olarak tasarlanmış PSCustomObject veri tipinin yer aldığını görebilirsiniz, diğer veri tipleri ise programlama ve betik dillerinden ve veritabanlarından aşina olduğumuz veri tipleridir. Bu veri türü kullanıcıların özelleştirilmiş nesneler oluşturmasına olanak tanır. PSCustomObject, farklı türlerde bir veya daha fazla özelliğe sahip bir nesnedir.

PSCustomObject oluşturmak için @{} (Hashtable) ile birlikte kullanılır.

$myObject = [PSCustomObject]@{
FirstName = 'Lets'
LastName = 'Defend'
Rank = 1
}
             

Bu örnekte, FirstName LastName ve Rank adlı üç özelliğe sahip bir PSCustomObject oluşturduk . Bu özellikler farklı veri türlerinde olabilir; örneğin, Ad ve Soyadı dizelerdir (değerleri tırnak içinde atadığımız için) ve Rank bir tam sayıdır (tırnak işaretleri kullanmadan sayısal bir değer atadığımız için).

Bu nesneyi oluşturduğumuzda ona şu şekilde erişebiliriz:

$myObject.FirstName
$myObject.LastName
$myObject.Rank
             

Powershell’deki değişkenler

PowerShell’de değişken, verileri depolamak için kullanılan bir ad veya etikettir. PowerShell’de değişkenler genellikle $ işaretiyle başlar. = operatörü değişkenlere değer atamak için kullanılır.

$myVariable = "Hello World"
$myNumber = 42
$myArray = 1,2,3,4,5
             

Değişkenimize değer atarken “ =” atama operatöründen sonra değerleri yazdığımız şekilde değişkenin veri tipini belirlediğimizi göreceksiniz . Örneğin Merhaba Dünya ifadesini ” ” içine alarak String tipinde bir veri olduğunu, 42 sayısını tırnak işareti kullanmadan yazarak Integer tipinde bir değer olduğunu belirttik ve son ifadede ise; değerleri virgülle ayırarak dizi olduğunu belirttik. PowerShell’deki değişkenler dinamiktir; bu, değişkenin veri türünün atanan değere bağlı olduğu ve değiştirilebileceği anlamına gelir.

Peki, tanımladığımız değişkenleri kullanmamız gerektiğinde nasıl çağıracağız?

Bir değişkeni daha sonra kullanmak için değişken adını (dolar işaretiyle birlikte) kullanabilirsiniz. Örneğin, bir değişkenin değerini yazdırmak için Write-Host cmdlet’ini kullanabilirsiniz:

PowerShell’de değişkenler metin, sayı, Boolean, dizi, karma tablosu ve hatta özel nesneler gibi birçok farklı veri türünü depolayabilir. Bunlar PowerShell’in .NET Framework üzerine inşa edilmesinin bir sonucudur; bu, PowerShell’in .NET tarafından desteklenen hemen hemen tüm veri türlerini destekleyebileceği anlamına gelir.

Bazı durumlarda belirli bir türde değişken oluşturmak gerekli olabilir. Bu durumda değişken oluşturulurken tür belirtilebilir:

[string]$myString = "Hello World"
[int]$myNumber = 42
[array]$myArray = 1,2,3,4,5
             

Böyle bir tanım, değişkenin yalnızca belirli türden değerleri kabul etmesini ve bu türün dışındaki atamaların hata vermesini sağlar. Bu özellik, yanlış veri türü atamalarının önlenmesine yardımcı olabilir. Aşağıda Int türünde bir değişken tanımladığımız ve String türünde bir değer atadığımız bir örneği görebilirsiniz :

Powershell Komutlarının Temelleri – 2

Temel operatörler ve İfadeler

PowerShell aritmetik, karşılaştırma, mantıksal ve atama gibi çeşitli operatörleri destekler.

Aritmetik operatörler

Aritmetik işlemlerde kullanılan operatörler şunlardır:

Örneğin $result = 5 + 2, 5 ve 2’nin toplamını result değişkenine atar.

Karşılaştırma Operatörleri

Bu operatörler iki değeri karşılaştırmak için kullanılır.

Örneğin $result = 5 -gt 2, 5’in 2’den büyük olup olmadığını kontrol eder ve sonucu, sonuç değişkenine atar. Sonuç bir Boolean tipi değeridir.

Mantıksal operatörler

Bu operatörler mantıksal işlemleri gerçekleştirmek için kullanılır.

Örneğin, $result = (5 -gt 2) -and (2 -gt 1) ifadesi her iki koşulun da doğru olup olmadığını kontrol eder ve sonucu, result değişkenine atar. Sonuç bir Boolean tipi değeridir.

Atama Operatörleri

Bu operatörler değişkenlerin değerini değiştirmek için kullanılır.

Örneğin $myVar = 5, myVar değişkenine 5 değerini atar. $myVar += 2 ifadesi, myVar değişkeninin geçerli değerine 2 ekler.

Bitsel Operatörler

Bu operatörler bitsel işlemleri gerçekleştirmek için kullanılır.

Örneğin, $result = 5 -band 3 ifadesi VE işleminin sonucunu 5 ve 3’ün bit düzeyinde sonucunu sonuç değişkenine atar.

Sonucu görmek için öncelikle sayıları ikili formatta ifade edelim:

5’in ikili formu: 101

3’ün ikili formu: 011

Bitsel AND operatörü, karşılık gelen bitlerin her ikisi de 1 olduğunda 1, aksi takdirde 0 değerini döndürür. Bu durumda 5(101) ve 3(011) üzerinde bitsel AND işlemi yaptığımızda sonucun ikili versiyonu 001 olacaktır. Bu, ondalık sistemde 1’e karşılık gelir.

Kısaca $result = 5 -band 3 ifadesi 1 değerini $result’a atar.

Dize Operatörleri

Bu operatörler dizi işlemlerini gerçekleştirmek için kullanılır.

Örneğin, $fullName = $firstName + ” ” + $lastName ifadesi, name ve lastName değişkenlerini birleştirir ve sonucu fullName değişkenine atar .

$name = "John"
$age = 30
$message = "Hello, my name is {0} and I am {1} years old." -f $name, $age
Write-Host $message

Bu kodu çalıştırdığınızda çıktı şu şekilde olacaktır: Merhaba, benim adım John ve 30 yaşındayım.

Burada, {0} ve {1} yer tutucularını -f operatörüyle birlikte $name ve $age değişkenlerinin değerleriyle değiştirdik. Bu, bir dize içinde dinamik değerleri kullanmanın kolay bir yoludur.

Bu tür biçimlendirme genellikle günlükleri, hata mesajlarını ve bilgileri kullanıcıya sunmak için kullanılır. Ayrıca karmaşık dize işlemleri için de kullanışlıdır. Özellikle çok sayıda değer içeren karmaşık dizeler oluşturmanız gerektiğinde -f operatörü kodunuzu daha okunabilir hale getirebilir.

Tür Dönüştürme Operatörleri

Bu operatörler bir değerin türünü başka bir türe dönüştürmek için kullanılır.

Örneğin, [int]$myString, myString değişkeninin değerini bir tam sayıya dönüştürür.

Döngü Yapıları

Döngü için

Belirli sayıda döngü gerçekleştirmeniz gerektiğinde for döngüsü kullanılır. Yapısı aşağıdaki gibidir:

for ($i=0; $i -lt 10; $i++) {
Write-Host $i
}

Bu örnekte döngü 0’dan başlar ve 10’a kadar (10 hariç) her yinelemede $i’yi 1 artırarak devam eder.

ForEach Loop

ForEach döngüsü, bir koleksiyonun her bir öğesi (dizi, liste vb.) üzerinde işlem yapmanız gerektiğinde kullanılır. Yapısı aşağıdaki gibidir:

$array = 1,2,3,4,5
foreach ($item in $array) {
Write-Host $item
}

Bu örnekte, $array dizisindeki her öğe için bir döngü gerçekleştirilir ve her öğenin değeri yazdırılır.

While Loop

While döngüsü, belirli bir koşul doğru olduğu sürece döngünün devam etmesini sağlar. Yapısı aşağıdaki gibidir:

$i = 0
while ($i -lt 10) {
Write-Host $i
$i++
}

Bu örnekte döngü $i 10’dan küçük olduğu sürece devam eder.

Do-While Döngüsü

Do-While döngüsü, döngünün en az bir kez oluşmasını garanti eder. Böylece durum kontrolü döngü bloğunun sonunda yapılır. Bu döngü belirtilen koşul doğru olduğu sürece devam eder. Yani, döngü bloğunun içindeki kod, koşul doğru olduğu sürece tekrar tekrar yürütülür. Koşul yanlış olduğunda döngü durur. Yapısı aşağıdaki gibidir:

$i = 0
do {
Write-Host $i
$i++
} while ($i -lt 10)

Bu örnekte $i 10’dan küçük olduğu sürece döngü devam eder. $i 10’a ulaştığında koşul yanlış olur ve döngü durur.

Do-Until Cycle

Do-While döngüsü, Do-While döngüsü gibi döngünün en az bir kez gerçekleşeceğini garanti eder. Do-While’dan farkı, belirtilen koşul yanlış olduğu sürece bu döngünün devam etmesidir. Yani, koşul yanlış olduğu sürece döngü bloğunun içindeki kod tekrar tekrar yürütülür. Koşul doğru olduğunda döngü durur:

$i = 0
do {
Write-Host $i
$i++
} while ($i -lt 10)

Bu örnekte döngü, $i 10’dan küçük olduğu sürece devam eder (koşul ($i -ge 10 yanlış olduğu sürece) $i 10’a ulaştığında koşul doğru olur ve döngü durur.

Powershell’de Dosya ve Dizin İşlemleri

PowerShell, Windows’un komut satırı tabanlı kodlama dilidir. Windows bileşenlerini yönetmek ve otomatikleştirmek için kullanılır. Bu ders boyunca PowerShell’in dosya işlemlerinde nasıl kullanılacağını öğreneceğiz.

Dosya Açma

PowerShell’de belirli bir dosyayı açmak için “Get-Content” cmdlet’ini kullanabiliriz. Bu cmdlet dosyanın içeriğini okumak için kullanılır. Örneğin “example.txt” dosyasını açmak için aşağıdaki kodu kullanabiliriz:

Get-Content -Path "C:\Path\To\Your\File\example.txt"
             

Dosya Okuma

Dosyadaki belirli sayıda satırı okumak istiyorsanız “-TotalCount” parametresini kullanabilirsiniz. Örneğin bir dosyanın ilk 5 satırını okumak için aşağıdaki kodu kullanabilirsiniz:

Get-Content -Path "C:\Path\To\Your\File\example.txt" -TotalCount 5

Dosya Yazma

Powershell’de dosyalara yazmak için “Set-Content”, “Add-Content” veya “Out-File” cmdlet’lerini kullanabiliriz.

Set-Content, belirli bir dosyaya içerik yazmanıza olanak tanır. Dosya zaten mevcutsa mevcut içeriği siler ve yeni içeriği yazar. Örneğin:

Set-Content -Path "C:\Path\To\Your\File\example.txt" -Value "LetsDefend is Great"
             

İçerik Ekle, mevcut bir dosyanın sonuna içerik eklemenizi sağlar. Dosya yoksa dosyayı oluşturur. Örneğin:

Add-Content -Path "C:\Path\To\Your\File\example.txt" -Value "LetsDefend is Great"

Out-File, bir komutun çıktısını bir dosyaya yönlendirmenize olanak tanır. Dosya zaten mevcutsa içeriği siler ve yeni çıktıyı yazar. -Append parametresi kullanılarak mevcut dosyanın sonuna eklemeler yapılabilir . Örneğin:

Get-Process | Out-File -FilePath "C:\Path\To\Your\File\processes.txt"             

Örneğin, bu komut Geçerli işlemlerin listesini Process.txt dosyasına yazar.

Aşağıdaki örnekte bu özellikleri bir arada nasıl kullanabileceğimizi görüyoruz.

$filePath = "C:\example.txt"

# Read File Content
$content = Get-Content -Path $filePath
Write-Host "Original content:"
Write-Host $content

# Add Content to File
Add-Content -Path $filePath -Value "New line of text"

# Read New Content
$newContent = Get-Content -Path $filePath
Write-Host "Updated content:"
Write-Host $newContent

Optimizasyon ve Hata İşleme

Komut Dosyası Optimizasyonu

Powershell, arkasındaki .NET framework desteği sayesinde bir işi yapmanın birden fazla yolunu sunacak. Bu seçeneklerin çokluğu çoğu zaman konforlu bir çalışma ortamı sağlarken, özellikle karmaşık işlerde aynı işi yapan seçenekler arasından daha az sistem kaynağı tüketen veya daha hızlı sonuç üreten yöntemleri belirlemek bizim elimizdedir. PowerShell betiği oluşturduktan sonra performansını artırmak ve daha verimli hale getirmek için her zaman aşağıdaki konuları dikkate almanızı öneririz:

Komutları Dikkatlice Seçin

Bazı PowerShell cmdlet’leri ve operatörleri diğerlerinden daha fazla işlem gücü gerektirir. Genellikle bir işlemi gerçekleştirmenin birden fazla yolu vardır. Bu yolların her biri farklı performans profillerine sahip olabilir.

Döngüleri Optimize Edin

Döngüler betiğin performansını önemli ölçüde etkileyebilir. Mümkün olduğunda foreach yerine For döngülerini kullanmayı düşünün. Döngülerde kullanılan değişkenlerin sayısını ve karmaşıklığını en aza indirin.

Değişkenleri Akıllıca Kullanın

PowerShell dinamik olarak yazılan bir dildir; bu, değişkenlerin değerlerinin ve türlerinin uçuş sırasında değiştirilebileceği anlamına gelir. Ancak bu esneklik ek işlem gücü gerektirebilir. Bu nedenle komut dosyalarınızı yazarken değişkenleri ve türlerini dikkatli seçin ve gerektiği kadar kullanın.

Profil Komut Dosyası

Hangi komutların ve blokların en fazla işlem süresini aldığını belirlemek için betiğin profilini çıkarın. Bu, optimizasyon çalışmalarınızı nereye odaklamamız gerektiğini belirlemenize yardımcı olacaktır.

Measure-Command ” kullanabilirsiniz cmdlet’i Bir komutun yürütülmesini ölçmek için.

Ancak daha detaylı profilleme yapmak isterseniz bu süreç biraz daha karmaşık olabilir. PowerShell varsayılan olarak gelişmiş profil oluşturma araçlarına sahip değildir. Ancak PowerShell .NET üzerine kurulu olduğundan, .NET uygulamalarına yönelik profil oluşturma araçlarını kullanabilirsiniz.

Bu tür araçlar genellikle GUI ile birlikte gelir ve çeşitli ölçümleri görselleştirir. Örneğin bu tür işlemler için JetBrains dotTrace veya Redgate ANTS gibi profesyonel araçlar kullanılabilir. Windows Performans Araç Seti gibi daha düşük düzeyli araçları da kullanabilirsiniz.

Sonuç olarak PowerShell’de profil oluşturma karmaşık olabilir ve çoğu zaman daha gelişmiş araçlar veya teknikler gerektirir. Bu nedenle, daha karmaşık profil oluşturmayı planlıyorsanız bunu yapmak için özel araçlar öğrenmeniz gerekebilir.

Hata Ayıklama Yöntemlerini Kullanın

Hatalar bir komut dosyasının performansını önemli ölçüde etkileyebilir. Hata ayıklama, kodunuzdaki hataları bulmanıza ve düzeltmenize yardımcı olur; bu da genel performansı artırabilir.

Dene/Yakala Yapısı

Powershell script yazarken dikkat etmemiz gereken önemli konulardan biri de scriptin çalıştırılması sırasında oluşabilecek hataların yönetimidir. Olası hataları önceden önlem almazsak, bu durum scriptin beklenmedik bir şekilde sonlanmasına ya da yanlış işlemler yapmasına neden olabilir ve bu sonuçlar gerçekten başınızı ağrıtabilir.

PowerShell bize bu tür durumları yönetmemiz için Try/Catch/Nihayet yapısını sağlar.

try bloğu hatalara neden olabilecek kod içeriyor. Try bloğunda bir hata oluşursa süreç catch bloğuna geçer Catch bloğunda hata durumunda çalıştırılacak kodlar bulunur. Nihayet bloğunda hata olsa da olmasa da çalıştırılacak kodlar bulunur. Bu nihayet bloğu genellikle kaynakları temizlemek ve düzgün bir şekilde kapatmak için kullanılır.

Daha iyi anlamak için bir örnek yapalım:

try {
Write-Host "This is try block"
#FaultyOperation
$result = 1 / 0
}
catch {
    
Write-Host "This is catch block"
Write-Host "Error: $_"
}
finally {

Write-Host "and this is finally block"
}

Bu örnekte bir sayıyı sıfıra bölemediğimiz için try bloğunda hata oluşuyor. Bu durumda hata mesajı yakalanır ve catch bloğuna yazdırılır. Daha sonra nihayet bloğundaki kod çalışır ve “İşlem tamamlandı” mesajını verir. ekranda mesaj.

Catch bloğunda kullanılan $_ değişkeni hata ayrıntılarını içerir. Bu değişkeni kullanarak kullanıcıya hatanın ne olduğunu bildirebiliriz.

Debugging

PowerShell hata ayıklamayı destekler ve çeşitli cmdlet’ler sunar. Çıkarma, belirli bir komutun veya komut dosyasının yürütülmesini duraklatma ve çeşitli değişkenlerin veya ifadelerin durumunu kontrol etme yeteneği sağlar.

“PowerShell ISE” ve “Visual Studio Code” gibi ortamlar grafiksel hata ayıklama arayüzü sağlar. Ancak hata ayıklama işlemlerini metin tabanlı komut satırından da gerçekleştirebilirsiniz. Bunun için birkaç cmdlet kullanabiliriz.

Set-PSBreakpoint (sbp): Belirli bir komut dosyası, satır ve/veya sütun için bir kesme noktası ayarlar.

Get-PSBreakpoint (gbp): Kullanılabilir kesme noktalarını listeler.

Remove-PSBreakpoint (rbp): Belirli bir kesme noktasını kaldırır.

Enable-PSBreakpoint (ebp): Belirli bir kesme noktasını etkinleştirir.

Disable-PSBreakpoint (dbp): Belirli bir kesme noktasını devre dışı bırakır.

Get-PSCallStack: Geçerli çağrı yığınını listeler.

Bunlar sizin için bir şey ifade etmiyorsa muhtemelen daha önce programlamayla hiç çalışmamışsınız demektir ama endişelenmeyin; Hepsini detaylı olarak göreceğiz.

Set-PSBreakpoint

Set-PSBreakpoint cmdlet’i belirli bir komut dosyası, satır veya komut üzerinde bir hata ayıklama kesme noktası ayarlar. Hata ayıklama kesme noktası, belirli bir koşul karşılandığında kod yürütmeyi duraklatır. Bu, belirli bir durumda kodun durumunu incelemenize ve hata ayıklama işlemlerini gerçekleştirmenize olanak tanır.

Bu cmdlet farklı şekillerde kullanılabilir.

Belirli bir betiğin belirli bir satırında bir kesme noktası ayarlamak için:

                    
Set-PSBreakpoint -Path "C:\Path\To\Script.ps1" -Line 20

                  

Belirli bir komut (örneğin, Write-Host) belirli bir komut dosyasında çalıştırıldığında bir kesme noktası ayarlamak için:

                    
Set-PSBreakpoint -Path "C:\Path\To\Script.ps1" -Command "Write-Host"

                  

Belirli bir komut dosyasında belirli bir koşul karşılandığında bir kesme noktası ayarlamak için:

                    
Set-PSBreakpoint -Path "C:\Path\To\Script.ps1" -Line 20 -Action { if ($someVariable -eq $someCondition) { break } }

                  

Bu üç örnekte -Path parametresi kesme noktasının hangi betiğe ait olduğunu belirtir. -Line parametresi kesme noktasının hangi satırda olacağını belirtir. -Command parametresi, belirli bir komut yürütüldüğünde bir kesme noktası tetikler. -Action parametresi, belirli bir koşul karşılandığında kesme noktasını tetikler.

Get-PSBreakpoint (GBP)

Get-PSBreakpoint cmdlet’i kullanılabilir hata ayıklama kesme noktalarının bir listesini döndürür. Bu cmdlet, bir PowerShell oturumunda ayarlanan tüm kesme noktalarını görüntüler.

Kullanımı oldukça basittir. Kesme noktalarının listesini almak için aşağıdaki komutu çalıştırabilirsiniz:

                    
Get-PSBreakpoint

                  

Bu komut, mevcut tüm kesme noktalarının bir listesini döndürür. Her kesme noktası için, belirli bir kodda, belirli bir satırda veya belirli bir komutta ayarlanan kesme noktası hakkındaki bilgileri görüntüler. Set-PSBreakpoint ile bir -Action parametresi belirtilirse , o eylemi de görüntüler.

Bu cmdlet mevcut kesme noktalarınızı yönetmek için kullanışlıdır. Özellikle büyük bir komut dosyasında çalışırken ve çok sayıda kesme noktası ayarladığınızda, hangi kesme noktalarının etkin olduğunu takip etmek için Get-PSBreakpoint cmdlet’ini kullanabilirsiniz.

Get-PSBreakpoint cmdlet’i aynı zamanda GBP olarak kısaltılmış olarak da mevcuttur .

Remove-PSBreakpoint (rbp)

Remove-PSBreakpoint cmdlet’i, PowerShell’de ayarlanan bir veya daha fazla hata ayıklama kesme noktasını kaldırmak için kullanılır.

Get-PSBreakpoint veya GBP komutunu kullanarak kesme noktalarının listesini aldıktan sonra , kaldırmak istediğiniz kesme noktasının kimliğini belirtebilirsiniz.

Kaldırmak istediğiniz kesme noktasını belirledikten sonra Remove-PSBreakpoint veya rbp komutunu kullanarak kesme noktasını kaldırabilirsiniz .

                    
Remove-PSBreakpoint -Id 1

Disable-PSBreakpoint (dbp)

Disable-PSBreakpoint cmdlet’i PowerShell’de bir hata ayıklama kesme noktasını devre dışı bırakmak için kullanılır ve ayrıca dbp olarak da kısaltılabilir .

                    
Disable-PSBreakpoint -Id 1

Enable-PSBreakpoint (ebp)

Enable-PSBreakpoint cmdlet’i, PowerShell’de devre dışı bırakılan bir hata ayıklama kesme noktasını etkinleştirmek için kullanılır. Dilerseniz ebp olarak kısaltarak da kullanabilirsiniz .

                    
Enable-PSBreakpoint -Id 1

Get-PSCallStack

Get-PSCallStack cmdlet’i, PowerShell oturumunda çalışan komut dosyalarının, işlevlerin ve komut dosyalarının çağrı yığınını almak için kullanılır. Bu cmdlet, yığın izlemeyi alarak geçerli çağrıların bir listesini döndürür.

Her çağrı, komut dosyası adı, satır numarası, işlev adı ve dosya yolu gibi bilgileri içerir. Bu, kodun hangi dosyadan, hangi fonksiyondan ve hangi satırdan geçtiğini gösterir.

Get-PSCallStack cmdlet’i hata ayıklama veya komut dosyası performansını analiz etme gibi senaryolarda kullanılabilir. Özellikle karmaşık scriptlerde hangi fonksiyonların hangi sırayla çağrıldığını veya hangi dosyaların hataya neden olduğunu görmek için bu cmdlet’i kullanabilirsiniz.

Örneğin, aşağıdaki komutu kullanarak çağrı yığınını alabilirsiniz:

                    
$callStack = Get-PSCallStack
$callStack

                  

Bu örnekte, çağrı yığını $callStack değişkenine atanır ve ardından $callStack değişkeni ekrana yazdırılır.

Get-PSCallStack cmdlet’i oturumunuzun çağrı yığınına erişmenize yardımcı olur ve çalışma zamanında PowerShell komut dosyalarının hangi kod bloklarını işlediğini gösterir.

Örnek Kullanım

Şimdi tüm bu hata ayıklama fonksiyonlarının bir arada kullanıldığı bir örnek yapalım:

#Function Sample
function Test-Function {
my money(
[int]$number
)

    # Set breakpoint
Set-PSBreakpoint -Command "Write-Host" -Script "example.ps1"

# Function in action
$result = 10 / $number

Write-Host "Result: $result"
}

# Set breakpoint
Set-PSBreakpoint -Script "example.ps1" -Line 6

# Call Function
Test-Function -number 0

# List Breakpoints
Get-PSBreakpoint

# Remove breakpoints
Remove-PSBreakpoint -Id 1

# List breakpoints
Get-PSBreakpoint

# Get callstack
$callStack = Get-PSCallStack
$callStack

# Enable all breakpoints
Get-PSBreakpoint | Enable-PSBreakpoint


# Disable all breakpoints
Get-PSBreakpoint | Disable-PSBreakpoint

Yukarıdaki çıktıda otomatik olarak DEBUG moduna geçtiğine dikkat edin. Komut satırı isteminin şu şekilde görüntülenmeye başladığını görüyorsunuz : [DBG]: PS C:\LetsDefend>> . Her kesme noktasından çıkmak için çıkış komutunu uygulamanız yeterlidir. Her kesme noktasından çıktığınızda Powershell, hata ayıklama oturumuyla ilgili bilgileri dökecek ve normal moda dönecektir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir