PowerShell

PowerShell Komutları: En Çok Kullanılan Komutlar ve Örnekler

Saha notu / teknik rehber Son kontrol 31 Ekim 2026 Konu merkezine dön →
Tolga CEYHAN Sistem Yönetimi & IT

PowerShell komutları ile Windows’ta servis, process, dosya, Event Log, ağ, uzak sunucu ve raporlama işlemlerini GUI’ye bağlı kalmadan yönetebilirsiniz. Ben günlük sistem yönetiminde tek tek komut ezberlemek yerine önce Get-Command, Get-Help ve pipeline mantığını kullanıyorum; ardından ihtiyaca göre komutları birleştiriyorum.

Bu rehberi hem hızlı bir PowerShell komut listesi hem de sistem yöneticileri için uygulamalı referans olacak şekilde hazırladım. Aşağıdaki temel komutlardan başlayıp ilerleyen bölümlerde Windows Server operasyonu, troubleshooting, raporlama ve uzak yönetime geçebilirsiniz.

En Çok Kullanılan PowerShell Komutları: Hızlı Liste

Komut Ne için kullanılır?
Get-Command Kullanılabilir cmdlet ve komutları bulur.
Get-Help Bir komutun kullanımını ve örneklerini gösterir.
Get-Member Pipeline’daki nesnenin özellik ve metotlarını gösterir.
Get-ChildItem Dosya ve klasörleri listeler.
Get-Process Çalışan process’leri görüntüler.
Get-Service Windows servislerini sorgular.
Get-WinEvent Event Log kayıtlarını sorgular.
Where-Object Pipeline çıktısını koşula göre filtreler.
Select-Object İhtiyaç duyulan property’leri seçer.
Sort-Object Çıktıyı belirli bir property’ye göre sıralar.
Test-Connection Ağ erişimini test eder.
Invoke-Command Uzak bilgisayarlarda PowerShell komutu çalıştırır.
Export-Csv PowerShell nesnelerini CSV raporuna aktarır.

İlk Öğrenilmesi Gereken PowerShell Komutları

Get-Command
Get-Help Get-Service -Examples
Get-Service
Get-Process
Get-ChildItem
Get-WinEvent -LogName System -MaxEvents 20
Test-Connection SRV-FS01 -Count 2

Yeni bir cmdlet kullanacağım zaman önce Get-Help <Komut> -Examples ile örneklere bakarım. Çıktıda hangi alanlarla çalışabileceğimi görmek için de komutu Get-Member ile pipeline’a bağlarım. Bu yaklaşım, hazır komutları kopyalamaktan daha sürdürülebilir.

Amaç ve Kapsam

Buradaki amaç yalnızca “hangi PowerShell komutu ne işe yarar?” sorusuna cevap vermek değil; komutların nasıl filtrelendiğini, zincirlendiğini ve günlük Windows yönetiminde nasıl kullanılabileceğini göstermektir.

Ön Koşullar

  • Windows PowerShell 5.1 veya PowerShell 7.x
  • Temel Windows yönetim bilgisi
  • Komutları üretim ortamında kullanmadan önce test ortamında doğrulama
  • Uzaktan yönetim için uygun WinRM/PowerShell Remoting yapılandırması ve yetkiler

PowerShell Neden Kritik?

GUI araçları tekil işlemler için yeterli olabilir; ancak işlem sayısı arttığında standartlaştırma ihtiyacı ortaya çıkar. Çok sayıda kullanıcı oluşturmak, sunucularda servis kontrolü yapmak, log toplamak veya düzenli rapor üretmek için komut tabanlı otomasyon daha uygundur.

  • Nesne tabanlı çıktı üretir.
  • Filtreleme, sıralama ve raporlamayı kolaylaştırır.
  • Uzak sistemlerde merkezi işlem yapılmasını sağlar.
  • CSV ve JSON gibi formatlarla raporlama ve entegrasyon sağlar.
  • Tekrarlayan operasyonların script haline getirilmesini sağlar.

Cmdlet Mantığı: Verb-Noun Standardı

Get-Service
Start-Service
Stop-Process
Get-ChildItem
Set-Location
Invoke-Command

Get- veri almak, Start- başlatmak, Stop- durdurmak ve New- yeni nesne oluşturmak için sık kullanılan fiillerdir.

PowerShell Öğrenmenin En Kritik 3 Komutu

Get-Command

Get-Command
Get-Command *service*
Get-Command -Verb Get
Get-Command -Noun Process

Get-Help

Get-Help Get-Service
Get-Help Get-Service -Examples
Get-Help Get-Service -Detailed
Get-Help Get-Service -Full

Get-Member

Get-Service | Get-Member

Get-Member, çıktının düz metin değil; Name, Status ve DisplayName gibi özelliklere sahip nesnelerden oluştuğunu anlamayı kolaylaştırır.

Pipeline Mantığı

Get-Service | Where-Object Status -eq 'Running'
Get-Service |
Where-Object Status -eq 'Running' |
Select-Object Name, Status

Bu akışta önce veri alınır, sonra filtrelenir ve son aşamada yalnızca ihtiyaç duyulan alanlar seçilir.

En Çok Kullanılan PowerShell Komutları

Get-ChildItem

Get-ChildItem C:\Logs
Get-ChildItem C:\Logs -Recurse
Get-ChildItem C:\Logs -Filter *.log -Recurse

Son 7 günde değişen log dosyalarını bulmak için:

Get-ChildItem C:\Logs -File -Recurse |
Where-Object LastWriteTime -gt (Get-Date).AddDays(-7) |
Select-Object FullName, Length, LastWriteTime

Get-Process

Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10 Name, Id, CPU

Get-Service

Get-Service | Where-Object Status -eq 'Running'
Get-Service |
Where-Object Status -eq 'Stopped' |
Select-Object Name, DisplayName, Status

Start-Service ve Stop-Service

Start-Service Spooler
Stop-Service Spooler

Where-Object

Get-Process | Where-Object WorkingSet -gt 200MB

Select-Object

Get-Service | Select-Object Name, Status, StartType

Sort-Object

Get-ChildItem D:\Data -File -Recurse |
Sort-Object Length -Descending |
Select-Object -First 20 FullName, Length

ForEach-Object

Get-ChildItem C:\Temp -File |
ForEach-Object {
    [PSCustomObject]@{
        Name   = $_.Name
        SizeMB = [math]::Round($_.Length / 1MB, 2)
    }
}

Dosya Sistemi Yönetimi

Büyük Dosyaları Bulma

Get-ChildItem D:\Shares -File -Recurse |
Sort-Object Length -Descending |
Select-Object -First 50 FullName, Length

Belirli Tarihten Sonra Değişen Dosyaları Listeleme

Get-ChildItem D:\Shares -File -Recurse |
Where-Object LastWriteTime -gt (Get-Date).AddDays(-30) |
Select-Object FullName, LastWriteTime

Boş Klasörleri Bulma

Get-ChildItem D:\Shares -Directory -Recurse |
Where-Object { (Get-ChildItem $_.FullName -Force | Measure-Object).Count -eq 0 } |
Select-Object FullName

Bu örnekler file server housekeeping, storage analizi ve migration öncesi keşif çalışmalarında kullanılabilir.

Servis ve Process Troubleshooting

Otomatik Başlayan Ama Çalışmayan Servisler

Get-Service |
Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } |
Select-Object Name, DisplayName, Status, StartType

CPU Tüketen Süreçler

Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10 Name, Id, CPU, WorkingSet

Bellek Kullanımına Göre Sıralama

Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object -First 10 Name, Id,
@{Name='MemoryMB';Expression={[math]::Round($_.WorkingSet / 1MB, 2)}}

Event Log Analizi

Get-WinEvent -LogName System -MaxEvents 50

Son 24 saatteki hata kayıtlarını görmek için:

Get-WinEvent -LogName System |
Where-Object {
    $_.LevelDisplayName -eq 'Error' -and
    $_.TimeCreated -gt (Get-Date).AddDays(-1)
} |
Select-Object TimeCreated, Id, ProviderName, Message

Ağ ve Bağlantı Kontrolü

Test-Connection SRV-FS01 -Count 2
'SRV-FS01','SRV-APP01','SRV-DB01' |
ForEach-Object {
    $result = Test-Connection $_ -Count 1 -Quiet -ErrorAction SilentlyContinue
    [PSCustomObject]@{
        ComputerName = $_
        Reachable    = $result
    }
}

Uzak Sunucu Yönetimi: Invoke-Command

Invoke-Command -ComputerName SRV-FS01 -ScriptBlock {
    Get-Service
}
Invoke-Command -ComputerName SRV-FS01,SRV-APP01,SRV-DB01 -ScriptBlock {
    Get-Service | Where-Object Status -eq 'Running'
}

Uzak Yönetimde Dikkat Edilecekler

  • PowerShell Remoting etkin olmalıdır.
  • Firewall ve WinRM ayarları doğru olmalıdır.
  • Yetkiler minimum gerekli seviyede tutulmalıdır.
  • Komutlar önce test ortamında doğrulanmalıdır.

Raporlama ve Veri Dışa Aktarma

Export-Csv

Get-Service |
Select-Object Name, Status, StartType |
Export-Csv .\services.csv -NoTypeInformation

JSON Çıktısı

Get-Service |
Select-Object Name, Status, StartType |
ConvertTo-Json

Örnek Sağlık Raporu

$services = Get-Service |
Where-Object Status -eq 'Stopped' |
Select-Object Name, DisplayName, Status, StartType

$processes = Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10 Name, Id, CPU

$services | Export-Csv .\stopped_services.csv -NoTypeInformation
$processes | Export-Csv .\top_processes.csv -NoTypeInformation

Performans: Script Yazarken Dikkat Edilecekler

Özellikle Export-Csv gibi komutları her iterasyonda çağırmak yerine, nesneleri üretip çıktı işlemini pipeline sonunda yapmak daha uygundur.

Verimsiz Yaklaşım

Import-Csv .\Input.csv | ForEach-Object {
    [pscustomobject]@{ Name = $_.Name } |
    Export-Csv .\Output.csv -Append -NoTypeInformation
}

Daha Doğru Yaklaşım

Import-Csv .\Input.csv | ForEach-Object {
    [pscustomobject]@{ Name = $_.Name }
} | Export-Csv .\Output.csv -NoTypeInformation

Sistem Yöneticileri İçin 15 Pratik Komut

Get-Command
Get-Help Get-Service -Examples
Get-Service | Get-Member
Get-Service | Where-Object Status -eq 'Running'
Get-Service | Where-Object Status -eq 'Stopped'
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10
Get-WinEvent -LogName System -MaxEvents 50
Get-ChildItem C:\Logs -Filter *.log -Recurse
Get-ChildItem D:\Data -File -Recurse | Where-Object LastWriteTime -gt (Get-Date).AddDays(-7)
Test-Connection SRV-FS01 -Count 2
Invoke-Command -ComputerName SRV-FS01 -ScriptBlock { Get-Service }
Get-Service | Select-Object Name, Status | Export-Csv .\services.csv -NoTypeInformation
Get-Process | Select-Object Name, Id, CPU | ConvertTo-Json
Get-Service | Select-Object Name, Status | Format-Table -AutoSize

Sık Yapılan Hatalar

Alias ile Üretim Scripti Yazmak

Üretim scriptlerinde gci yerine Get-ChildItem, ? yerine Where-Object kullanmak okunabilirliği artırır.

Format Komutlarını Pipeline’ın Ortasında Kullanmak

Format-Table ve Format-List sunum içindir; veri işleme tamamlandıktan sonra kullanılmalıdır.

Doğrudan Üretim Ortamında Deneme Yapmak

Servis durdurma, dosya silme veya yetki değiştirme gibi işlemler önce test ortamında doğrulanmalıdır.

Kopyala-Yapıştır ile Çalışmak

Bir komutun ürettiği nesneyi anlamadan kullanmak sürdürülebilir değildir. Get-Help ve Get-Member günlük kullanımın parçası olmalıdır.

PowerShell 5.1 mi, PowerShell 7 mi?

  • Windows PowerShell 5.1, eski Windows odaklı modüllerle daha geniş uyumluluk sağlayabilir.
  • PowerShell 7.x, modern .NET tabanı ve çapraz platform desteğiyle öne çıkar.

Üretim scriptlerinde kullanılan modüllerin hangi sürümle çalıştığı mutlaka test edilmelidir.

Gerçek Operasyon Senaryosu

Günlük servis kontrollerinin uzak masaüstü bağlantılarıyla manuel yapılması zaman alıcı ve hataya açık olabilir. Bu süreç PowerShell ile merkezi hale getirilebilir: sunucu listesi alınır, Invoke-Command ile servisler sorgulanır, sonuçlar filtrelenir ve Export-Csv ile raporlanır.

Buradaki asıl kazanım yalnızca hız değil; kontrol adımlarının standartlaştırılması ve tekrar edilebilir hale gelmesidir.

Sonuç

PowerShell komutları tek tek öğrenildiğinde araçtır; pipeline, nesne mantığı, filtreleme, uzaktan yönetim ve raporlama ile birleştirildiğinde güçlü bir sistem yönetimi yaklaşımına dönüşür.

Başlangıç için en doğru yöntem: Get-Command ile keşfet, Get-Help ile öğren, Get-Member ile nesneyi tanı ve ardından pipeline ile komutları birlikte kullan.

İlgili Rehberler

Microsoft Dokümantasyonu

PowerShell ile İleri Seviye Uygulamalar

PowerShell Öğrenme Rotası

Bu sayfa TolgaTech PowerShell merkezindeki ana komut ve operasyon referansıdır. PowerShell’e yeni başlıyorsanız temel kavramlar için Windows PowerShell Nedir?, script geliştirmeye geçmek için PowerShell Script Nedir ve Nasıl Yazılır?, PowerShell 7/Core farkları için PowerShell Core rehberleriyle devam edebilirsiniz. Hazır operasyon komutları için ayrıca Komut Kütüphanesi kullanılabilir.

BÜLTEN

Yeni teknik rehberleri kaçırma

PowerShell, Active Directory, Windows Server, Intune ve sistem güvenliği üzerine yeni rehberleri doğrudan e-postana gönderelim. Spam yok, dilediğinde çıkarsın.

E-postanı yalnızca bülten için kullanırız. Gizlilik politikası.

Yazar

Tolga CEYHAN

Sistem Yönetimi & IT

Tolga CEYHAN, bilgi teknolojilerini severek takip eder ve BT üzerine hali hazırda aktif olarak çalışmaktadır. 2006 yılından 2017 yılına kadar web tasarım yazılım üzerine çalışmalar yaptım. Şuan ise Windows Sistem ve Sistem Güvenliği alanında çalışmalarımı sürdürmekteyim.

PROFESYONEL PROFİL

Bu teknik içeriğin arkasındaki deneyimi inceleyin.

Microsoft altyapıları, Active Directory, SCCM, PowerShell, Windows Server ve VMware odaklı teknik profil ve proje çalışmaları.

Projeler & Vaka Çalışmalarıİngilizce Profil

Bir yanıt yazın

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