PowerShell Kodu Nedir? Kullanım Örnekleri ve İpuçları

PowerShell Kodu Nedir? Temel Kavramlar ve Tarihçe

PowerShell, Microsoft tarafından geliştirilen, görev otomasyonu ve yapılandırma yönetimi için tasarlanmış bir komut satırı kabuğu ve betik dilidir. .NET platformu üzerine inşa edilen PowerShell, sistem yöneticilerinin ve geliştiricilerin Windows, Linux ve macOS işletim sistemlerinde yönetim görevlerini otomatikleştirmesine olanak tanır. PowerShell'in ilk sürümü 2003 yılında "Monad" kod adıyla ortaya çıkmış, 2006 yılında resmi olarak piyasaya sürülmüş ve 2016 yılında açık kaynak (MIT lisansı) olarak PowerShell Core adıyla yeniden yayınlanmıştır. Günümüzde PowerShell, hem Windows hem de çapraz platform destekli sürümlerle geniş bir kullanıcı kitlesine hitap etmektedir.

PowerShell'in temel yapı taşları "cmdlet" (command-let) olarak adlandırılan küçük, tek amaçlı komutlardır. Bu cmdlet'ler fiil-isim çifti şeklinde adlandırılır; örneğin Get-Process, Set-Location, Remove-Item gibi. Her cmdlet belirli bir işlemi yerine getirir ve çıktısını nesne olarak üretir. Bu nesne tabanlı yapı, PowerShell'i geleneksel metin tabanlı kabuklardan ayıran en önemli özelliktir. PowerShell'de kullanılan betik dosyaları .ps1 uzantısına sahiptir ve bu dosyalar üzerinde çalıştırma politikaları (Execution Policy) ile güvenlik kontrolü sağlanır.

PowerShell Cmdlet'leri ve Temel Komutlar

PowerShell'de yüzlerce cmdlet bulunur ve bunlar sistem yönetiminin hemen her alanını kapsar. En yaygın kullanılan cmdlet'ler arasında Get-Help, Get-Process, Get-Service, Set-ExecutionPolicy ve Get-EventLog sayılabilir. Get-Help cmdlet'i herhangi bir komut hakkında detaylı bilgi almak için kullanılır ve PowerShell öğrenme sürecinde en değerli araçtır. Get-Process çalışan işlemleri listelerken, Get-Service sistem hizmetlerinin durumunu sorgular. Set-ExecutionPolicy ise betik çalıştırma güvenlik seviyesini belirler ve Restricted, RemoteSigned, AllSigned, Unrestricted gibi seçenekler sunar.

PowerShell Kodu Nedir? Kullanım Örnekleri ve İpuçları - 1

Aktif Dizin yönetimi için Get-ADUser, Get-ADComputer ve Set-ADUser gibi cmdlet'ler kullanılır. Olay günlüklerine erişmek için Get-EventLog veya Get-WinEvent cmdlet'leri tercih edilir. PowerShell ayrıca nesne tabanlı bir ardışık düzen (pipeline) sistemine sahiptir. Bu sayede bir cmdlet'in çıktısı doğrudan başka bir cmdlet'e girdi olarak aktarılabilir. Örneğin, Get-Process | Where-Object { $_.CPU -gt 100 } komutu, CPU kullanımı 100'ün üzerinde olan işlemleri filtreler.

PowerShell Betikleri ve Kod Yapısı

PowerShell betikleri, birden çok cmdlet'i, değişkenleri, döngüleri ve koşullu ifadeleri bir araya getirerek karmaşık otomasyon görevlerini yerine getirir. Değişkenler $ işareti ile tanımlanır ve herhangi bir .NET nesnesini tutabilir. Döngüler için for, foreach, while ve do-while yapıları kullanılır. Koşullu ifadeler ise if, elseif, else ve switch ile gerçekleştirilir. PowerShell'de ayrıca fonksiyonlar, modüller ve hata yakalama mekanizmaları (try, catch, finally) bulunur.

Örnek bir PowerShell betiği, belirli bir tarihten sonra oluşturulan Active Directory kullanıcılarını listeleyebilir. Aşağıdaki kod parçası, son 7 gün içinde oluşturulan kullanıcıları getirir ve ad, etkinlik durumu ve oluşturulma tarihi bilgilerini görüntüler:

PowerShell Kodu Nedir? Kullanım Örnekleri ve İpuçları - 2

$Fecha = (Get-Date).AddDays(-7)
Get-ADUser -Filter {whenCreated -ge $Fecha} -Properties Name,Enabled,whenCreated

Bu betikte önce Get-Date cmdlet'i ile şu anki tarih alınır, AddDays metodu ile 7 gün geriye gidilir ve sonuç $Fecha değişkenine atanır. Ardından Get-ADUser cmdlet'i Filter parametresi ile whenCreated özelliği $Fecha'dan büyük veya eşit olan kullanıcıları sorgular. Properties parametresi ile hangi özelliklerin görüntüleneceği belirtilir.

PowerShell Kullanımının Avantajları ve Yaygın Kullanım Alanları

PowerShell'in en büyük avantajı nesne tabanlı yapısıdır. Geleneksel kabuklarda metin çıktısını ayrıştırmak gerekirken, PowerShell'de çıktı doğrudan nesne olarak alınır ve üzerinde işlem yapmak kolaylaşır. Ayrıca PowerShell, Windows Yönetim Araçları (WMI), COM nesneleri, .NET sınıfları ve REST API'leri ile doğrudan etkileşim kurabilir. Uzaktan yönetim (remoting) özelliği sayesinde binlerce bilgisayarda aynı anda komut çalıştırmak mümkündür.

PowerShell Kodu Nedir? Kullanım Örnekleri ve İpuçları - 3

PowerShell'in yaygın kullanım alanları şunlardır:

  • Sistem yönetimi ve otomasyonu (kullanıcı hesabı oluşturma, disk alanı izleme, güncelleme yönetimi)
  • Ağ yapılandırması ve güvenlik denetimleri
  • Active Directory yönetimi ve raporlama
  • Exchange Server, SharePoint, Azure gibi Microsoft ürünlerinin yönetimi
  • Veri işleme ve rapor oluşturma (CSV, XML, JSON dönüşümleri)
  • DevOps süreçlerinde CI/CD boru hatlarının otomasyonu
  • Güvenlik testleri ve penetrasyon testi senaryoları

PowerShell ayrıca büyük kurumsal ortamlarda binlerce sunucunun yönetimini kolaylaştırır. Örneğin, tüm sunuculardaki hizmet durumlarını kontrol etmek, disk kullanım oranlarını raporlamak veya güvenlik güncellemelerini dağıtmak için tek bir PowerShell betiği yazmak yeterlidir.

Önemli PowerShell Cmdlet'leri Karşılaştırması

Aşağıdaki tabloda, PowerShell'de sık kullanılan bazı cmdlet'ler ve işlevleri karşılaştırılmıştır:

PowerShell Kodu Nedir? Kullanım Örnekleri ve İpuçları - 4
Cmdlet AdıİşleviKullanım Örneği
Get-ProcessÇalışan işlemleri listelerGet-Process -Name notepad
Get-ServiceSistem hizmetlerinin durumunu sorgularGet-Service -Name Spooler
Set-ExecutionPolicyBetik çalıştırma politikasını belirlerSet-ExecutionPolicy RemoteSigned
Get-ADUserActive Directory kullanıcılarını sorgularGet-ADUser -Identity johndoe
Get-EventLogWindows olay günlüklerine erişirGet-EventLog -LogName System -Newest 10
Where-ObjectNesneleri belirtilen koşula göre filtrelerGet-Process | Where-Object {$_.CPU -gt 50}

Bu cmdlet'lerin çoğu birbiriyle ardışık düzende kullanılabilir. Örneğin, tüm hizmetleri listeleyip yalnızca durdurulmuş olanları bulmak için Get-Service | Where-Object {$_.Status -eq 'Stopped'} komutu kullanılabilir. PowerShell'de ayrıca Select-Object, Sort-Object, Group-Object gibi cmdlet'lerle çıktıyı şekillendirmek mümkündür.

PowerShell'de Güvenlik ve Execution Policy

PowerShell, betiklerin kötü amaçlı kullanımını önlemek için Execution Policy (Çalıştırma Politikası) adı verilen bir güvenlik mekanizması sunar. Bu politika, betiklerin hangi koşullarda çalıştırılabileceğini belirler. Temel politika seviyeleri şunlardır:

  • Restricted: Hiçbir betik çalıştırılamaz, yalnızca etkileşimli komutlara izin verilir.
  • RemoteSigned: İnternetten indirilen betiklerin güvenilir bir yayıncı tarafından imzalanması gerekir.
  • AllSigned: Tüm betiklerin güvenilir bir yayıncı tarafından imzalanması zorunludur.
  • Unrestricted: Tüm betiklerin çalıştırılmasına izin verilir, ancak internetten indirilen betikler için onay istenir.
  • Bypass: Hiçbir kısıtlama uygulanmaz, tüm betikler çalıştırılabilir.

Execution Policy, Set-ExecutionPolicy cmdlet'i ile değiştirilebilir. Örneğin, Set-ExecutionPolicy RemoteSigned -Scope CurrentUser komutu, yalnızca mevcut kullanıcı için politikayı değiştirir. Politika değişiklikleri genellikle yönetici yetkileri gerektirir ve güvenlik duvarı veya antivirüs yazılımları tarafından da denetlenebilir. PowerShell ayrıca betiklerin imzalanmasını sağlayan Set-AuthenticodeSignature cmdlet'ini de içerir.

PowerShell Kodu Nedir? Kullanım Örnekleri ve İpuçları - 5

PowerShell Öğrenmek İçin İpuçları ve Kaynaklar

PowerShell öğrenmeye başlamak için en iyi yol, temel cmdlet'leri deneyerek ve basit betikler yazarak pratik yapmaktır. Microsoft'un resmi PowerShell belgeleri ve "PowerShell Overview" başlıklı dokümantasyonu, başlangıç seviyesinden ileri seviyeye kadar kapsamlı bilgiler sunar. Ayrıca "Scripting Language Specification" sayfası, dilin sözdizimi ve özellikleri hakkında detaylı referans sağlar. PowerShell topluluğu oldukça aktiftir ve GitHub'da "PowerShell" deposu altında binlerce örnek betik ve modül bulunabilir.

Öğrenme sürecinde dikkat edilmesi gereken bazı ipuçları şunlardır:

  • Get-Help cmdlet'ini sık sık kullanın ve -Examples parametresi ile örnekleri inceleyin.
  • Ardışık düzen (pipeline) kavramını iyi anlayın; nesneleri bir komuttan diğerine aktarmak PowerShell'in gücünü ortaya çıkarır.
  • Değişkenler, döngüler ve koşullar gibi temel programlama yapılarını öğrenin.
  • PowerShell ISE veya Visual Studio Code gibi entegre geliştirme ortamlarını kullanarak betik yazmayı kolaylaştırın.
  • Hata ayıklama için Write-Debug, Write-Verbose ve Set-PSBreakpoint gibi araçları kullanın.
  • Gerçek dünya senaryoları için küçük otomasyon projeleri belirleyin, örneğin günlük dosyalarını temizleme veya kullanıcı hesaplarını raporlama.

PowerShell ile İlgili Sık Sorulan Sorular

PowerShell'i yeni öğrenenlerin sıkça sorduğu sorulardan biri, PowerShell ile komut istemi (cmd.exe) arasındaki farktır. Komut istemi metin tabanlı çalışırken, PowerShell nesne tabanlıdır ve çok daha güçlü betikleme yeteneklerine sahiptir. Ayrıca PowerShell, tüm cmd.exe komutlarını çalıştırabilir ancak bunun tersi geçerli değildir. Bir diğer yaygın soru, PowerShell betiklerinin güvenliği ile ilgilidir. Execution Policy ve dijital imzalar sayesinde PowerShell, kötü amaçlı betiklerin çalıştırılmasını engellemek için birden çok katmanlı güvenlik sunar.

PowerShell'in hangi işletim sistemlerinde çalıştığı da merak edilen konulardandır. Windows PowerShell yalnızca Windows'ta çalışırken, PowerShell Core (sürüm 6 ve üzeri) Windows, Linux ve macOS'ta çalışabilir. Bu çapraz platform desteği, PowerShell'i bulut ve hibrit ortamlar için ideal bir araç haline getirir. Son olarak, PowerShell öğrenmek için herhangi bir programlama geçmişine sahip olmak gerekmez; ancak temel sistem yönetimi kavramlarına hakimiyet öğrenmeyi hızlandırır.

Kaynakça

Bu makalede kullanılan bilgiler aşağıdaki kaynaklardan derlenmiştir:

Microsoft Learn – PowerShell Overview. Erişim adresi: https://learn.microsoft.com/es-es/powershell/

Microsoft Learn – Scripting Language Specification. Erişim adresi: https://learn.microsoft.com/es-es/powershell/scripting/lang-spec/

IONOS Digital Guide – Top 40 PowerShell Cmdlets. Erişim adresi: https://www.ionos.es/digitalguide/servidores/configuracion/comandos-de-powershell

PowerShell kod script komut satırı otomasyon Windows örnekler ipuçları
Uyarı Bu içerik genel bilgilendirme amaçlıdır.
Yazar

Stefano Barcellos

Visite Barbados katkıda bulunanı.

« Önceki gönderi
Alfabetik Sırayla Uygulamalar Listesi

İlgili gönderiler