PowerShell İpuçları: Her Windows Kullanıcısının Bilmesi Gerekenler

Konu İçeriği
PowerShell ile Verimlilik Artisi
PowerShell’i ilk duyduğumda “bunlari kim kullanir ki” diye düşünmüştüm. CMD zaten var, neden bir komut satırına daha ihtiyacım olsun? Ama bir gün yüzlerce log dosyasını tek tek açıp içinde hata aramam gerekti. Saatlerce süreceğini düşünüyordum. Arkadaşım bir satır PowerShell komutu yazdı ve beş saniyede tüm hataları buldu. O gün anladım ki PowerShell öğrenmek zorunluluk değil, ama öğrenirseniz hayatınızı ciddi anlamda kolaylaştırıyor.
PowerShell, Windows’un guçlü komut satırı aracı. Grafiksel arayüzle dakikalar süren işlemleri tek bir komutla saniyeler içinde yapabilirsiniz. Başlangıçta ürkütücü görünebilir, komutlar uzun ve karmaşık. Ama bir kez alıştığınızda faresiz yaşamaya başlıyorsunuz. Ben artık dosya kopyalamayı, servis yeniden başlatmayı, disk temizlemeyi hep PowerShell’den yapıyorum.
En Yararli PowerShell Komutları
Aşağıdaki komutların hepsini günlük işlerimde kullanıyorum. Her birini ne zaman, neden kullandığımı da anlatayım ki sadece komut listesi olmasın.
| Komut | Açıklama | Örnek Kullanım |
|---|---|---|
Get-Process |
Çalışan süreçleri listeler | Get-Process | Sort-Object CPU -Descending |
Get-Service |
Servisleri listeler | Get-Service | Where-Object {$_.Status -eq "Running"} |
Get-EventLog |
Olay günlüklerini okur | Get-EventLog -LogName System -Newest 20 |
Test-Connection |
Ping atar | Test-Connection google.com -Count 4 |
Get-ChildItem |
Dosya/dizin listeler | Get-ChildItem -Recurse -Filter "*.log" |
Copy-Item |
Dosya kopyalar | Copy-Item C:kaynak* D:hedef -Recurse |
Set-ExecutionPolicy |
Betik çalıştırma izni | Set-ExecutionPolicy RemoteSigned |
Get-Process komutunu en çok bilgisayar yavaşladığında kullanıyorum. Hangi program belleği veya işlemciyi şişirmiş, tek bakışta görüyorsunuz. Eskiden Görev Yöneticisi’ni açıp sıralama yapardım, şimdi PowerShell’de Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 yazıyorum ve en çok işlemci kullanan on programı anında görüyorum.
Get-ChildItem ise dosya ararken ciddi zaman kazandırıyor. Windows arama çubuğunda bir şey aradığımda bazen dakikalarca bekliyorum. PowerShell’de ise hangi klasörde ne aradığımı tam belirtebildiğim için sonuç anında geliyor. Geçenlerde iki yıl önceki bir projenin dosyalarını bulmam gerekti, Get-ChildItem -Recurse -Filter "*.sql" ile üç saniyede tüm SQL dosyalarını buldum.
Sistem Yönetimi Komutları
Sistem yönetimi işlemleri için PowerShell gerçekten güçlü. Ben bu komutları hem kendi bilgisayarım hem de yönettiğim sunucularda kullanıyorum.
Disk Temizlik
Geçici dosyalar birikince bilgisayar yavaşlıyor. Ben ayda bir disk temizlik yapıyorum ve bunu PowerShell ile yapıyorum. CCleaner gibi programlara hiç gerek kalmıyor.
# Temp dosyalarını temizle
Remove-Item -Path $env:TEMP* -Recurse -Force -ErrorAction SilentlyContinue
# Windows Update onbelleğini temizle
Stop-Service wuauserv
Remove-Item C:WindowsSoftwareDistributionDownload* -Recurse -Force
Start-Service wuauserv
Bu komutları ilk çalıştırdığımda yedi gigabayt temp dosyası silindi. Yedi gigabayt! O günden beri ayda bir bu komutları çalıştırıyorum ve disk dolması sorunuyla hiç karşılaşmıyorum. Windows Update onbelleğini temizlemek de özellikle güncelleme sorunları yaşadığınızda işe yarıyor.
Ağ Bilgileri
İnternet bağlantısında sorun yaşadığımda ilk PowerShell’i açıyorum. IP yapılandırmasına bakmak, DNS onbelleğini temizlemek, aktif bağlantıları görmek için ayrı ayrı program açmaya gerek yok.
# IP yapılandırması
Get-NetIPConfiguration
# Ağ bağlantılarını göster
Get-NetTCPConnection | Where-Object {$_.State -eq "Established"}
# DNS onbelleğini temizle
Clear-DnsClientCache
DNS onbelleğini temizlemek özellikle web geliştirme yapıyorsanız ciddi önemli. Yeni bir site yayına aldığımda tarayıcıda eski adresi görüyorum diyen müşterilere “DNS onbelleğini temizleyin” diyorum. Ama onlar bilmiyor. Ben uzak bağlantıyla PowerShell’den Clear-DnsClientCache çalıştırıyorum ve sorun çözülüyor.
Ağ bağlantılarını gösteren komut ise hangi programların internete bağlı olduğunu görmenizi sağlıyor. Şüpheli bir bağlantı fark ederseniz hangi programa ait olduğunu hemen bulabilirsiniz.
PowerShell Profil Özelleştirme
PowerShell’de en sevdiğim özelliklerden biri profil dosyası. Sık kullandığınız komutları, fonksiyonları ve kısayolları tanımlayıp her açılışta otomatik yüklenebilir hale getirebilirsiniz. Benim profilimde ondan fazla fonksiyon var ve her gün hepsini kullanıyorum.
# Profil dosyasını açın
notepad $PROFILE
# Örnek kısayol tanımlayın
function gs { git status }
function gp { git push }
function which($command) { Get-Command $command | Select-Object Source }
Set-Alias ll Get-ChildItem
# Klasöre hızlı git
function proj { Set-Location C:Projeler }
function desk { Set-Location $env:USERPROFILEDesktop }
Bu kısayolları ekledikten sonra PowerShell’de sadece gs yazarak git status çalıştırabiliyorum. Veya proj yazarak projeler klasörüne anında geçiyorum. Küçük şeyler ama gün boyu toplandığında ciddi zaman kazandırıyor. Benim en çok kullandığım fonksiyon which. Linux’taki which komutunu Windows’da da kullanabilmek ciddi kolaylık.
PowerShell vs CMD Karsilastirmasi
Birçoğumuz hâlâ CMD kullanıyor. Ben de yıllarca kullandım. Ama PowerShell’e geçtikten sonra CMD’ye dönme sebebim kalmadı. Aralarındaki farkları net anlayınca neden PowerShell’in daha iyi olduğunu siz de göreceksiniz.
- Nesne tabanlı vs metin tabanlı: CMD çıktıları düz metin. PowerShell ise nesne olarak çalışıyor. Bu ne demek? CMD’de bir komutun çıktısını başka bir komuta aktarırken metin üzerinde parse etmeniz gerekiyor. PowerShell’de ise direkt nesne özelliklerine erişebiliyorsunuz. Örneğin süreç adını, bellek kullanımını, işlemci yüzdesini ayrı ayrı çekebilirsiniz.
- .NET Framework desteği: PowerShell, .NET Framework ile tam entegrasyonlu. Yani sistemde yapabildiğiniz hemen her şeyi PowerShell’den de yapabilirsiniz. Kayıt defteri düzenleme, WMI sorguları, COM objelerine erişim hepsi mümkün.
- Betik gücü: PowerShell betikleri CMD batch dosyalarından çok daha güçlü. Döngüler, koşullar, fonksiyonlar, hata yakalama hepsi düzgün bir şekilde destekleniyor. Ben karmaşık otomasyonları PowerShell ile yazıyorum.
- Çapraz platform: PowerShell 7, Windows’un yanında Linux ve macOS’ta da çalışıyor. Ben Linux sunucularımda da PowerShell kullanıyorum. Tek bir betik diliyle her yerde çalışabilmek büyük kolaylık.
İlk başta PowerShell komutlarının uzunluğu rahatsız ediyor. dir yerine Get-ChildItem yazmak tuhaf geliyor. Ama bunun bir mantığı var: fiil-isim yapısı. Her komut Get-, Set-, Remove-, New- gibi bir fiille başlıyor. Böylece ne yaptığını komut adından anlıyorsunuz. Ayrıca eski CMD komutlarının çoğu PowerShell’de de çalışıyor. dir, cd, cls hepsi kullanılabiliyor. Geçiş dönemisinde bu çok rahatlatıcı.
Sonuç
PowerShell’i öğrenmeye başlamak için uzman olmanıza gerek yok. İki üç komut öğrenin, günlük işlerinizi hızlandırın. Zamanla daha karmaşık komutları da keşfedeceksiniz. Ben üç yıl önce sıfırdan başladım ve şimdi otomasyon betikleri yazıyorum. Öğrenme eğrisi dik değil, sadece biraz pratik gerekiyor. İlk adım olarak Get-Process ve Get-ChildItem komutlarını deneyin. Göreceksiniz ki faresiz çalışmak aslında daha hızlı.


