İçeriğe geç
Yeni yazı çıkınca e-posta · 4.812 abone 190 rehber · 78 ipucu · 58 komut RSS GitHub LinkedIn İletişim
Ara Ctrl K Bültene katıl
Tüm arşiv · 190 rehber →
Tüm araçlar · 75 üreteç →
PowerShell

PowerShell nedir? Metin değil nesne taşıyan kabuk

Klasik kabuklardan farkı, cmdlet adlandırma düzeni, nesne boru hattı, yürütme ilkesi ve Windows PowerShell ile PowerShell 7 ayrımı.

Mustafa Çelik 25 Ağustos 2026 · 5 dk okuma

PowerShell’i diğer kabuklardan ayıran tek bir tasarım kararı vardır ve geri kalan her şey ondan çıkar: komutlar birbirine metin değil nesne aktarır.

Metin ile nesne farkı

Klasik bir kabukta her komutun çıktısı metindir. Bir sonraki komut o metni ayrıştırmak zorundadır — sütunları saymak, boşluklara bölmek, düzenli ifadelerle yakalamak.

Bu kırılgandır. Çıktının biçimi değişirse betik sessizce yanlış çalışır. Farklı dil ayarlarında sütun başlıkları değişir ve aynı betik başka makinede bozulur.

PowerShell’de çıktı yapılandırılmış bir nesnedir. Bir sürecin adına ulaşmak için satırı ayrıştırmazsınız; doğrudan o özelliği istersiniz. Biçim değişse de kod çalışmaya devam eder.

Ayrımın pratikte ne anlama geldiği boru hattı: nesne mi metin mi rehberinde ayrıntılı ele alınıyor.

Cmdlet adlandırma düzeni

Komutlar fiil-isim kalıbıyla adlandırılır: Get-Service, Set-ItemProperty, New-LocalUser, Remove-Item.

Fiil listesi sabittir ve anlamları tanımlıdır. Get okur, Set değiştirir, New oluşturur, Remove siler, Test denetler ve mantıksal değer döndürür.

Bu tutarlılığın somut faydası, tahmin edilebilirliktir: bir modülü hiç görmemiş olsanız bile komut adını büyük olasılıkla doğru tahmin edersiniz.

Keşif de bu düzen üzerine kuruludur — komutları isme göre arayabilir, bir komutun kabul ettiği parametreleri ve örneklerini yardım sisteminden okuyabilirsiniz.

Boru hattı

Komutlar boru işaretiyle zincirlenir ve her adım bir öncekinin nesnelerini alır.

Tipik zincir üç adımdan oluşur: al, süz, işle. Servisleri alırsınız, durduranları süzersiniz, üzerinde işlem yaparsınız.

Süzme ve seçme ayrı işlerdir ve karıştırılırlar: biri hangi nesnelerin geçeceğini, diğeri hangi özelliklerin taşınacağını belirler.

Önemli bir alışkanlık: süzmeyi zincirin başına koymak. Binlerce nesneyi taşıyıp sonunda üçünü seçmek, uzak makinelerde belirgin gecikme üretir.

Yürütme ilkesi bir güvenlik sınırı değil

Yeni başlayanların ilk karşılaştığı engel, betik çalıştırmayı engelleyen yürütme ilkesidir.

Amacı yanlışlıkla indirilen bir betiğin çift tıklamayla çalışmasını önlemektir. Bir güvenlik sınırı değildir — kararlı bir saldırgan onu kolayca aşar ve zaten aşmasına gerek de yoktur.

Bu yüzden ilkeyi bir koruma katmanı sanmak yanıltıcıdır. Gerçek koruma imzalı betikler, uygulama denetimi ve en az yetki ilkesinden gelir; çerçevesi en az yetki ilkesi yazısında.

Güvenli çalıştırma: WhatIf ve Confirm

PowerShell’in en değerli ama en az kullanılan özelliklerinden biri, değişiklik yapan komutların bir prova kipi sunmasıdır.

-WhatIf eklendiğinde komut hiçbir şey yapmaz, yalnızca ne yapacağını söyler. Toplu silme ve toplu değişiklik işlemlerinde bu, geri dönülemez hataları önleyen tek adımdır.

Kendi yazdığınız betiklere de bu desteği eklemek mümkündür ve üretimde çalışacak her betikte yapılmalıdır. Yöntemi WhatIf ve Confirm ile güvenli otomasyon rehberinde.

Uzak yönetim

PowerShell komutları uzak makinelerde çalıştırabilir. İki kip vardır: tek seferlik komut göndermek, ya da etkileşimli bir oturum açmak.

Kritik ayrıntı, uzak makineden geri dönen şeyin serileştirilmiş nesneler olmasıdır. Özellikleri okuyabilirsiniz ama nesnenin metotları çalışmaz — yerel bir nesne gibi davranmaz.

Bu, “yerelde çalışan betik uzakta çalışmıyor” durumunun en sık nedenidir. Diğer tuzaklar WinRM ve uzak yönetim tuzakları rehberinde.

İki farklı PowerShell

Bugün iki ayrı ürün vardır ve karıştırılmaları gerçek sorunlara yol açar.

Windows PowerShell 5.1 işletim sistemiyle gelir, .NET Framework üzerinde çalışır ve yalnızca Windows’tadır. Yeni özellik almaz.

PowerShell 7 ayrıca kurulur, .NET üzerinde çalışır ve Linux ile macOS’ta da çalışır. Geliştirme burada sürüyor.

İkisi yan yana kurulabilir ve ayrı modül yollarına sahiptir. 5.1’de çalışan bir betik 7’de çalışmayabilir; bazı eski modüller uyumlu değildir.

Zamanlanmış görevlerde bu ayrım özellikle şaşırtıcıdır — görev hangi sürümü çağırıyor? Konunun tamamı PowerShell 7’ye geçiş: farklar ve zamanlanmış görev neden farklı davranır rehberlerinde.

Betik yazarken

Üç alışkanlık, tek seferlik komutları sürdürülebilir betiklere dönüştürür.

Parametre tanımlayın. Değerleri betiğin içine gömmek yerine dışarıdan alın; aynı betik farklı ortamlarda kullanılabilir hâle gelir. Yöntemi parametre ve yardım rehberinde.

Hataları yakalayın. Öntanımlı davranışta pek çok hata betiği durdurmaz ve sessizce devam eder — yanlış sonuç üretir. Ayrıntısı hata yönetimi rehberinde.

Günlük tutun. Ne zaman, hangi makinede, ne yapıldı. Bir gün gerektiğinde bunu aramak istersiniz; betiklerde günlük tutma rehberi bu tarafta.

Betikleri kodlarken karşılaşılan kodlama sorunları için PowerShell kodlayıcı aracı var.

Kısaca

PowerShell, nesne taşıyan bir kabuktur; metin ayrıştırma yükünü ortadan kaldırır. Fiil-isim düzeni komutları tahmin edilebilir kılar, boru hattı ise işi zincirler.

Üretimde kullanacaksanız üç şeyi baştan kurun: parametreler, hata yakalama ve -WhatIf desteği. Bu üçü olmayan bir betik, çalıştığı sürece iyidir — bozulduğunda ise nedenini kimse bilemez.

Mustafa Çelik

Altyapı ve Operasyon Müdürü, İstanbul. 25 yıldır BT altyapısı, sistem yönetimi ve ağ altyapısıyla uğraşıyor; öğrendiklerini bu blogda üretim ortamında denenmiş rehberlere çeviriyor.

Hakkımda

Bu rehber işinize yaradıysa, sonrakini kaçırmayın.

Yeni yazı yayınlandığında tek e-posta. Takvim yok, dilediğiniz an çıkabilirsiniz.

Bülten sağlayıcısı henüz bağlanmadı. Bağlanana kadar e-posta ile yazabilirsiniz ya da RSS akışını takip edebilirsiniz.