PowerShell ile Gelişmiş Sistem Yönetimi ve Otomasyon
Bilgi teknolojileri (BT) dünyasında, sistem yöneticileri ve ağ uzmanları için manuel işlemleri otomatize etmek hayati bir önem taşır. Özellikle çok sayıda cihazın bulunduğu laboratuvar ortamlarında veya kurumsal ağ altyapılarında, rutin yapılandırmaları cihazlara hızlıca dağıtmak için güçlü araçlara ihtiyaç duyulur. Microsoft tarafından geliştirilen modern bir otomasyon platformu ve görev tabanlı betik dili olan PowerShell, bu ihtiyacı karşılamak üzere tasarlanmıştır.
Bölüm 1: PowerShell'e Giriş
Seviye: Başlangıç
Hedef Kitle: Sistem Yöneticileri, Siber Güvenlik Uzmanları, BT Öğretmenleri, DevOps Mühendisleri ve Windows Sunucu Yöneticileri
İçindekiler
PowerShell Nedir?
Neden PowerShell Öğrenmeliyiz?
CMD ve PowerShell Arasındaki Farklar
Windows PowerShell ve PowerShell 7
PowerShell Mimarisi
PowerShell Sürümleri
PowerShell Konsolunu Tanıyalım
İlk Komutlarımız
Yardım Sistemi
Komut Keşfetme
Alias Kavramı
PowerShell'in Çalışma Mantığı
Object-Oriented Shell Kavramı
Pipeline (Boru Hattı)
İlk Laboratuvar
1. PowerShell Nedir?
PowerShell, Microsoft tarafından geliştirilen nesne tabanlı (Object-Oriented) bir komut satırı kabuğu (Shell) ve betik (Scripting) dilidir.
İlk sürümü 2006 yılında yayımlanmıştır.
Linux dünyasında Bash neyse, Windows dünyasında PowerShell odur. Ancak PowerShell yalnızca bir kabuk değildir; aynı zamanda güçlü bir otomasyon ve yönetim platformudur.
PowerShell ile:
Windows yönetebilirsiniz.
Sunucu yönetebilirsiniz.
Active Directory yönetebilirsiniz.
Azure yönetebilirsiniz.
Microsoft 365 yönetebilirsiniz.
VMware yönetebilirsiniz.
Hyper-V yönetebilirsiniz.
SQL Server yönetebilirsiniz.
Docker yönetebilirsiniz.
SSH üzerinden Linux sunucularını yönetebilirsiniz.
Windows bilgisayarları SSH ile uzaktan yönetebilirsiniz.
2. PowerShell Neden Geliştirildi?
Eski Windows komut satırı (CMD) birçok konuda yetersizdi.
Örneğin:
dir
çıktısı yalnızca metindir.
Bu metin üzerinde işlem yapmak zordur.
PowerShell ise:
Get-ChildItem
komutunu çalıştırdığında size sadece yazı değil, nesneler (Objects) döndürür.
Bu nesnelerin;
Name
Length
CreationTime
LastWriteTime
Extension
Attributes
gibi özellikleri vardır.
Bu nedenle PowerShell ile filtreleme, sıralama, raporlama ve otomasyon çok daha kolaydır.
3. CMD ve PowerShell Karşılaştırması
| Özellik | CMD | PowerShell |
|---|---|---|
| Çıkış türü | Metin | Nesne (Object) |
| Programlama dili | Batch | Gelişmiş Script Dili |
| Pipeline | Sınırlı | Güçlü |
| Hata Yönetimi | Basit | Gelişmiş |
| Active Directory | Hayır | Evet |
| Registry Yönetimi | Kısıtlı | Tam Destek |
| WMI/CIM | Yok | Var |
| JSON | Yok | Var |
| XML | Yok | Var |
| REST API | Yok | Var |
| SSH | Sınırlı | Yerleşik Destek |
| Platform | Windows | Windows, Linux, macOS |
4. Windows PowerShell ve PowerShell 7
PowerShell'in iki ana sürümü vardır.
Windows PowerShell (5.1)
Yerleşik olarak Windows ile gelir.
Çalıştırmak için:
powershell
Sürümü öğrenelim:
$PSVersionTable
Örnek:
PSVersion 5.1.26100.4652
PSEdition Desktop
OS Microsoft Windows
PowerShell 7
Modern sürümdür.
.NET üzerine kuruludur.
Platform bağımsızdır.
Windows
Linux
macOS
üzerinde çalışır.
Başlatmak için:
pwsh
Sürüm:
$PSVersionTable
Örnek:
PSVersion 7.5.0
PSEdition Core
5. PowerShell Nerelerde Çalışır?
PowerShell şu ortamlarda kullanılabilir:
Windows 10
Windows 11
Windows Server
Azure
Microsoft 365
Linux
Pardus
Ubuntu
Debian
Kali Linux
Fedora
macOS
Örneğin Pardus üzerinde PowerShell 7 kurarak Windows sunucularını SSH ile yönetebilirsiniz.
6. PowerShell'i Açma Yöntemleri
Başlat Menüsü
Arama kutusuna:
PowerShell
yazın.
Çalıştır Penceresi
Win + R
ardından:
powershell
CMD İçinden
powershell
SSH Bağlantısı Sonrası
Pardus'tan Windows'a bağlandıktan sonra:
ssh Administrator@192.168.1.100
CMD açıldıysa:
powershell
veya doğrudan PowerShell ile bağlanmak için:
ssh -t Administrator@192.168.1.100 powershell
7. PowerShell Konsolunu Tanıyalım
Örnek istem:
PS C:\Users\Administrator>
Buradaki bileşenler:
PS→ PowerShell istemiC:→ Geçerli sürücü\Users\Administrator→ Çalışma dizini>→ Komut bekleniyor
8. İlk PowerShell Komutlarımız
Bulunduğunuz dizini öğrenin:
Get-Location
Kısa yazımı:
pwd
Dizin içeriğini listeleyin:
Get-ChildItem
Kısa yazımı:
dir
veya
ls
PowerShell, Bash ve CMD kullanıcılarının alışkanlıklarını kolaylaştırmak için birçok takma ad (alias) içerir.
9. Yardım Sistemi (Get-Help)
PowerShell'in en güçlü özelliklerinden biri yerleşik yardım sistemidir.
Bir komutun yardımını görüntülemek için:
Get-Help Get-Process
Ayrıntılı yardım:
Get-Help Get-Process -Detailed
Tam yardım:
Get-Help Get-Process -Full
Sadece örnekler:
Get-Help Get-Process -Examples
İlk kullanımda yardım dosyalarını güncellemek için yönetici olarak:
Update-Help
10. Komut Keşfetme
Belirli bir konuda hangi komutların bulunduğunu öğrenmek için Get-Command kullanılır.
Örneğin süreç (process) yönetimi:
Get-Command *Process*
Servis yönetimi:
Get-Command *Service*
SSH ile ilgili komutlar:
Get-Command *SSH*
11. Alias (Takma Ad) Kavramı
Birçok PowerShell komutunun kısa adı vardır.
| Alias | Gerçek Komut |
|---|---|
| ls | Get-ChildItem |
| dir | Get-ChildItem |
| pwd | Get-Location |
| cat | Get-Content |
| cp | Copy-Item |
| mv | Move-Item |
| rm | Remove-Item |
Alias'ları görmek için:
Get-Alias
Belirli bir alias'ı incelemek için:
Get-Alias ls
12. PowerShell'in Çalışma Mantığı
PowerShell'de komutlar genellikle şu yapıyı takip eder:
Verb-Noun
Örnekler:
Get-Process
Get-Service
Get-ChildItem
Start-Service
Stop-Service
Restart-Service
New-Item
Copy-Item
Remove-Item
Set-ExecutionPolicy
Bu standart yapı sayesinde komutları tahmin etmek ve öğrenmek kolaylaşır.
13. Object-Oriented Shell
PowerShell'in en önemli farkı metin yerine nesneler ile çalışmasıdır.
Örneğin:
Get-Process
çıktısı yalnızca ekrana yazılan satırlar değildir. Her süreç (process), belleğinde özellikleri ve metotları olan bir nesnedir.
Bu nesnelerin özelliklerini görmek için:
Get-Process | Get-Member
Get-Member, bir nesnenin sahip olduğu tüm özellikleri (Properties) ve metotları (Methods) listeler.
14. Pipeline (Boru Hattı)
PowerShell'in en güçlü özelliklerinden biri pipeline'dır.
Bir komutun çıktısı, diğer komuta metin olarak değil nesne olarak aktarılır.
Örnek:
Get-Process | Sort-Object CPU
En fazla bellek kullanan ilk 10 süreç:
Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object -First 10
Çalışan servisleri listeleme:
Get-Service |
Where-Object Status -eq Running
15. İlk Laboratuvar
Aşağıdaki komutları sırayla çalıştırın ve çıktıları inceleyin:
$PSVersionTable
Get-Location
Get-ChildItem
Get-Help Get-Service -Examples
Get-Command *Service*
Get-Service
Get-Process
Get-Date
Get-Alias
Get-Process | Get-Member
Bölüm Özeti
Bu bölümde:
PowerShell'in ne olduğunu öğrendiniz.
CMD ile arasındaki temel farkları gördünüz.
Windows PowerShell ve PowerShell 7 sürümlerini tanıdınız.
Yardım sistemini ve komut keşfetme araçlarını kullandınız.
Alias kavramını öğrendiniz.
PowerShell'in neden nesne tabanlı olduğunu ve pipeline mantığını kavradınız.
İlk temel komutlarınızı çalıştırarak uygulamalı başlangıç yaptınız.
PowerShell Eğitimi
Bölüm 2: Cmdlet'ler, Yardım Sistemi ve Nesnelerle Çalışma
Seviye: Başlangıç → Orta
Hedef: PowerShell komutlarının yapısını öğrenmek, yardım sistemini etkin kullanmak ve nesneler üzerinde çalışmaya başlamak.
İçindekiler
Cmdlet Nedir?
Verb-Noun Yapısı
Onaylı (Approved) Fiiller
Get-Command
Get-Help
Update-Help
Show-Command
Get-Member
Parametre Kullanımı
Common Parameters
Pipeline Mantığı
Select-Object
Where-Object
Sort-Object
Measure-Object
Format-Table
Format-List
Format-Wide
Out-Host ve Out-File
İlk Gerçek Sistem Yönetimi Senaryoları
Laboratuvar Çalışmaları
1. Cmdlet Nedir?
PowerShell'deki temel komutlara Cmdlet (Command-let) adı verilir.
CMD'deki komutlar:
dir
copy
move
tasklist
PowerShell'de ise cmdlet kullanılır:
Get-Process
Get-Service
Get-ChildItem
Copy-Item
Move-Item
Restart-Service
Bir cmdlet tek bir işi iyi yapacak şekilde tasarlanmıştır.
2. Verb-Noun Yapısı
PowerShell'deki tüm cmdlet'ler şu standardı izler:
Verb-Noun
Örneğin:
| Verb | Noun | Açıklama |
|---|---|---|
| Get | Process | Süreçleri getir |
| Get | Service | Servisleri getir |
| Start | Service | Servisi başlat |
| Stop | Service | Servisi durdur |
| Restart | Service | Servisi yeniden başlat |
| Remove | Item | Dosya sil |
| Copy | Item | Dosya kopyala |
| Rename | Item | Dosya yeniden adlandır |
| New | Item | Yeni dosya/klasör oluştur |
Bu standart sayesinde komutları ezberlemek yerine tahmin etmek mümkündür.
3. Onaylı Fiiller (Approved Verbs)
PowerShell, rastgele fiiller yerine standart fiiller kullanır.
Tüm fiilleri görmek için:
Get-Verb
Örnek çıktı:
| Verb | Anlamı |
|---|---|
| Get | Getir |
| Set | Ayarla |
| New | Oluştur |
| Remove | Sil |
| Start | Başlat |
| Stop | Durdur |
| Restart | Yeniden Başlat |
| Clear | Temizle |
| Invoke | Çalıştır |
| Test | Test Et |
| Export | Dışa Aktar |
| Import | İçe Aktar |
| Compare | Karşılaştır |
| Convert | Dönüştür |
Kendi fonksiyonlarınızı yazarken de bu fiilleri kullanmanız önerilir.
4. Get-Command
PowerShell'deki en önemli keşif aracıdır.
Tüm komutları listeler:
Get-Command
Sadece servis komutları:
Get-Command *Service*
SSH komutları:
Get-Command *SSH*
Firewall:
Get-Command *Firewall*
Network:
Get-Command *Net*
Active Directory:
Get-Command *AD*
Bir komutun hangi modülden geldiğini öğrenmek:
Get-Command Get-Service
Örnek:
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Service 7.0.0 Microsoft.PowerShell.Management
5. Get-Help
PowerShell'in yerleşik dokümantasyon sistemidir.
Temel kullanım:
Get-Help Get-Service
Detaylı yardım:
Get-Help Get-Service -Detailed
Tam yardım:
Get-Help Get-Service -Full
Sadece örnekler:
Get-Help Get-Service -Examples
Bu seçenek günlük çalışmalarda en sık kullanılanıdır.
6. Yardım Dosyalarını Güncelleme
İlk kurulumdan sonra:
Update-Help
Yönetici olarak çalıştırılmalıdır.
Belirli modül:
Update-Help -Module Microsoft.PowerShell.Management
7. Show-Command
GUI üzerinden cmdlet oluşturmayı sağlar.
Show-Command Get-Service
Komut parametrelerini grafik arayüzden seçebilirsiniz.
Not: Bu özellik Windows PowerShell'de bulunur; PowerShell 7 ve platformlar arası sürümlerde her zaman desteklenmeyebilir.
8. Get-Member
PowerShell'in en güçlü komutlarından biridir.
Bir nesnenin tüm özelliklerini gösterir.
Örneğin:
Get-Process | Get-Member
Çıktı:
TypeName:
System.Diagnostics.Process
Property örnekleri:
CPU
Id
ProcessName
WorkingSet
StartTime
Threads
Method örnekleri:
Kill()
Close()
Refresh()
WaitForExit()
Artık PowerShell'in neden nesne tabanlı olduğu daha net görülür.
9. Parametre Kullanımı
Bir cmdlet'in davranışı parametrelerle değiştirilir.
Örnek:
Get-Process -Name explorer
Birden fazla süreç:
Get-Process -Name chrome
ID ile:
Get-Process -Id 1234
10. Common Parameters
Tüm cmdlet'lerde ortak olarak bulunur.
En önemlileri:
-Verbose
-Debug
-ErrorAction
-ErrorVariable
-WarningAction
-WhatIf
-Confirm
Örneğin:
Remove-Item test.txt -WhatIf
Silmez.
Sadece ne yapacağını gösterir.
Bu özellikle üretim ortamlarında güvenli deneme yapılabilir.
11. Pipeline Mantığı
PowerShell'in kalbi pipeline'dır.
Komut 1
↓
Object
↓
Komut 2
↓
Object
↓
Komut 3
Örnek:
Get-Service |
Where-Object Status -eq Running |
Sort-Object Name
CMD'den en büyük fark budur.
12. Select-Object
Belirli alanları seçmek için kullanılır.
Get-Process |
Select-Object Name,CPU
İlk 10 süreç:
Get-Process |
Select-Object -First 10
Son 5 süreç:
Get-Process |
Select-Object -Last 5
Benzersiz kayıtlar:
Select-Object -Unique
13. Where-Object
Filtreleme yapar.
Örneğin çalışan servisler:
Get-Service |
Where-Object Status -eq Running
Sadece Chrome süreçleri:
Get-Process |
Where-Object ProcessName -like "*chrome*"
Belleği 500 MB üzeri kullanan süreçler:
Get-Process |
Where-Object WorkingSet -gt 500MB
14. Sort-Object
Sıralama yapar.
CPU kullanımına göre:
Get-Process |
Sort-Object CPU
Ters sıralama:
Get-Process |
Sort-Object CPU -Descending
15. Measure-Object
İstatistik üretir.
Kaç süreç var?
Get-Process |
Measure-Object
Toplam CPU:
Get-Process |
Measure-Object CPU -Sum
En büyük:
Measure-Object CPU -Maximum
Ortalama:
Measure-Object CPU -Average
16. Format-Table
Tablo oluşturur.
Get-Service |
Format-Table
Belirli sütunlar:
Get-Service |
Format-Table Name,Status
Otomatik genişlik:
Get-Service |
Format-Table Name,Status -AutoSize
17. Format-List
Liste görünümü sağlar.
Get-Process |
Format-List
Belirli alanlar:
Get-Process |
Format-List Name,CPU
18. Format-Wide
Tek sütun görünümü:
Get-Service |
Format-Wide Name
19. Out-Host ve Out-File
Ekrana yazdırma:
Get-Service |
Out-Host
Dosyaya kaydetme:
Get-Service |
Out-File servisler.txt
UTF-8 kodlamasıyla:
Get-Service |
Out-File servisler.txt -Encoding utf8
20. Gerçek Sistem Yönetimi Senaryoları
Çalışan servisleri listele
Get-Service |
Where-Object Status -eq Running |
Sort-Object Name
En çok RAM kullanan ilk 10 süreç
Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object -First 10 Name,Id,WorkingSet
En son değiştirilen 20 dosya
Get-ChildItem C:\Logs |
Sort-Object LastWriteTime -Descending |
Select-Object -First 20
Diskteki en büyük dosyalar
Get-ChildItem C:\ -Recurse -File |
Sort-Object Length -Descending |
Select-Object -First 20 Name,Length
Not: Büyük disklerde bu komut uzun sürebilir ve erişim izinleri nedeniyle bazı klasörlerde hata verebilir. Gerekirse
-ErrorAction SilentlyContinueparametresi kullanılabilir.
Son çalışan süreçler
Get-Process |
Sort-Object StartTime -Descending
Bazı sistem süreçleri StartTime bilgisini göstermeyebilir; bu durumda ilgili kayıtlar hata oluşturabilir.
21. Laboratuvar Çalışmaları
Aşağıdaki uygulamaları sırasıyla gerçekleştirin:
Laboratuvar 1
Tüm cmdlet'leri sayın.
Get-Command | Measure-Object
Laboratuvar 2
Bilgisayardaki tüm servisleri bulun.
Get-Service
Laboratuvar 3
Sadece çalışan servisleri listeleyin.
Get-Service |
Where-Object Status -eq Running
Laboratuvar 4
En fazla CPU kullanan ilk 5 süreci bulun.
Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 5 Name,CPU
Laboratuvar 5
Get-Service komutunun örneklerini görüntüleyin.
Get-Help Get-Service -Examples
Laboratuvar 6
Get-Process nesnesinin tüm özelliklerini inceleyin.
Get-Process | Get-Member
Bölüm Özeti
Bu bölümde:
Cmdlet yapısını ve
Verb-Nounstandardını öğrendiniz.Get-Commandile komut keşfetmeyi öğrendiniz.Get-HelpveUpdate-Helpile yardım sistemini etkin kullanmayı gördünüz.Get-Memberile nesnelerin özelliklerini incelemeyi öğrendiniz.Select-Object,Where-Object,Sort-ObjectveMeasure-Objectcmdlet'leriyle veri seçme, filtreleme, sıralama ve özetleme işlemlerini gerçekleştirdiniz.Gerçek sistem yönetimi senaryolarında bu cmdlet'leri kullanarak günlük yönetim görevlerine yönelik uygulamalar yaptınız.
Yorumlar