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.
Bölüm 3: PowerShell Nesneleri (Objects), Property, Method ve Pipeline'ın Derinlikleri
Seviye: Orta
Hedef: PowerShell'in neden metin yerine nesnelerle çalıştığını anlamak, özellik (Property) ve metotları (Method) etkin kullanmak, pipeline mantığını derinlemesine öğrenmek.
İçindekiler
PowerShell Neden Nesne Tabanlıdır?
Metin ve Nesne Arasındaki Fark
Object (Nesne) Nedir?
.NET ve PowerShell İlişkisi
Property (Özellik) Kavramı
Method (Metot) Kavramı
Get-Member ile Nesneleri İnceleme
Select-Object -ExpandProperty
PSCustomObject
Hashtable
Pipeline'ın İç Yapısı
ForEach-Object
Where-Object Derinlemesine
Özel Nesneler Oluşturma
CSV, JSON ve XML ile Nesne Kullanımı
Gerçek Sistem Yönetimi Senaryoları
Laboratuvar Çalışmaları
1. PowerShell Neden Nesne Tabanlıdır?
CMD'de komutların çıktısı yalnızca metindir.
Örneğin:
tasklist
çıktısı:
chrome.exe 4580
explorer.exe 1268
Bu metni işlemek zordur.
PowerShell'de ise:
Get-Process
çıktısı aslında bir Process nesneleri koleksiyonudur.
Her süreç;
Adı
Bellek kullanımı
CPU süresi
Başlangıç zamanı
İşlem kimliği (PID)
Öncelik değeri
gibi onlarca özelliğe sahiptir.
2. Metin ve Nesne Arasındaki Fark
CMD:
ipconfig
Çıktı:
IPv4 Address . . . . . . : 192.168.1.100
PowerShell:
Get-NetIPAddress
Çıktı bir nesnedir.
Örneğin yalnızca IPv4 adreslerini almak için:
Get-NetIPAddress |
Select-Object IPAddress
Burada IPAddress bir metin değil, nesnenin bir özelliğidir.
3. Object (Nesne) Nedir?
Programlamada nesne;
Özellikler (Properties)
Metotlar (Methods)
içeren bir yapıdır.
Örnek:
Bir otomobil düşünelim.
Özellikleri:
Marka
Model
Renk
Motor Hacmi
Yakıt Türü
Metotları:
Çalıştır()
Durdur()
KapılarıKilitle()
PowerShell'deki her nesne de benzer şekilde çalışır.
4. .NET ve PowerShell İlişkisi
PowerShell, .NET platformu üzerine kuruludur.
Bu nedenle her PowerShell nesnesi aslında bir .NET nesnesidir.
Örneğin:
Get-Process
Türünü öğrenelim:
Get-Process | Get-Member
İlk satır:
TypeName: System.Diagnostics.Process
Yani bu bir .NET Process nesnesidir.
Başka örnek:
Get-Date | Get-Member
Çıktı:
TypeName: System.DateTime
5. Property (Özellik) Kavramı
Bir nesnenin bilgilerini tutan alanlara Property denir.
Örneğin:
Get-Process notepad
Özelliklerinden bazıları:
Id
Name
CPU
WorkingSet
StartTime
Threads
HandleCount
PriorityClass
Company
ProductVersion
Sadece belirli alanları göstermek için:
Get-Process |
Select-Object Name,Id,CPU
6. Method (Metot) Kavramı
Metotlar nesnenin gerçekleştirebildiği işlemlerdir.
Örneğin:
Get-Process notepad |
Get-Member
Method örnekleri:
Kill()
Refresh()
Close()
WaitForExit()
Dispose()
Kill() Metodu
Bir süreci sonlandırır.
(Get-Process notepad).Kill()
Dikkat:
Kill()işlemi verilerin kaydedilmesini beklemeden süreci sonlandırabilir. Kritik uygulamalarda dikkatli kullanılmalıdır.
7. Get-Member Derinlemesine
Bir nesnenin tüm üyelerini gösterir.
Get-Service |
Get-Member
Sadece Property'ler:
Get-Service |
Get-Member -MemberType Property
Sadece Method'lar:
Get-Service |
Get-Member -MemberType Method
Alias Property:
Get-Process |
Get-Member -MemberType AliasProperty
8. Select-Object -ExpandProperty
Normal kullanım:
Get-Service |
Select-Object Name
Çıktı:
Name
----
BITS
Spooler
Gerçek değeri almak:
Get-Service |
Select-Object -ExpandProperty Name
Çıktı:
BITS
Spooler
-ExpandProperty ile doğrudan özelliğin değeri elde edilir.
9. PSCustomObject
Kendi nesnelerinizi oluşturabilirsiniz.
$Kullanici = [PSCustomObject]@{
Ad = "Nuri"
Soyad = "TIRAŞ"
Gorev = "BT Öğretmeni"
Okul = "TSOMTAL"
}
Gösterelim:
$Kullanici
Çıktı:
Ad : Nuri
Soyad : TIRAŞ
Gorev : BT Öğretmeni
Okul : TSOMTAL
Belirli bir özelliğe erişelim:
$Kullanici.Gorev
Çıktı:
BT Öğretmeni
10. Hashtable
PowerShell'de anahtar-değer (key-value) yapıları için kullanılır.
$Sunucu = @{
Host = "Server01"
IP = "192.168.1.10"
SSH = 22
}
Erişim:
$Sunucu["Host"]
veya
$Sunucu.Host
Hashtable'lar sıralı olmak zorunda değildir. Sıralı bir yapı istiyorsanız
[ordered]@{}kullanabilirsiniz.
11. Pipeline'ın İç Yapısı
PowerShell'de boru hattı (|) metin değil, nesne taşır.
Get-Process |
Where-Object CPU -gt 100 |
Sort-Object CPU -Descending |
Select-Object -First 5
Akış şu şekildedir:
Get-Process
│
Process Object
│
Where-Object
│
Process Object
│
Sort-Object
│
Process Object
│
Select-Object
Bu nedenle özellikler ve metotlar pipeline boyunca korunur.
12. ForEach-Object
Her nesne üzerinde işlem yapar.
Get-Service |
ForEach-Object {
$_.Name
}
$_ değişkeni pipeline'daki mevcut nesneyi temsil eder.
Örnek:
Get-Process |
ForEach-Object {
"$($_.ProcessName) - PID: $($_.Id)"
}
13. Where-Object Derinlemesine
Çalışan servisler:
Get-Service |
Where-Object {$_.Status -eq "Running"}
RAM kullanımı 500 MB'dan fazla olan süreçler:
Get-Process |
Where-Object {$_.WorkingSet -gt 500MB}
Başlayan adı "Win" olan servisler:
Get-Service |
Where-Object {$_.Name -like "Win*"}
PowerShell 3.0 ve sonrasında daha kısa sözdizimi de kullanılabilir:
Get-Service | Where-Object Status -eq Running
14. Özel Nesneler Oluşturma
Disk raporu:
Get-PSDrive |
ForEach-Object {
[PSCustomObject]@{
Surucu = $_.Name
BosAlanGB = [math]::Round($_.Free/1GB,2)
ToplamGB = [math]::Round(($_.Used+$_.Free)/1GB,2)
}
}
Çıktı:
Surucu BosAlanGB ToplamGB
------ ---------- --------
C 120.35 256
D 550.10 1000
Bu yapı raporlama ve envanter çıkarmada oldukça kullanışlıdır.
15. CSV, JSON ve XML ile Nesne Kullanımı
CSV'ye aktarma:
Get-Service |
Export-Csv servisler.csv -NoTypeInformation
JSON'a dönüştürme:
Get-Process |
ConvertTo-Json
JSON'dan nesne oluşturma:
Get-Content veri.json |
ConvertFrom-Json
XML'e aktarma:
Get-Service |
Export-Clixml servis.xml
16. Gerçek Sistem Yönetimi Senaryoları
Çalışan süreçleri CSV'ye aktarın
Get-Process |
Select-Object Name,CPU,WorkingSet |
Export-Csv process.csv -NoTypeInformation
Çalışan servis sayısını hesaplayın
Get-Service |
Where-Object Status -eq Running |
Measure-Object
Windows sürüm bilgisini alın
Get-ComputerInfo |
Select-Object WindowsProductName,
WindowsVersion,
OsHardwareAbstractionLayer
Ağ bağdaştırıcılarını listeleyin
Get-NetAdapter |
Select-Object Name,Status,MacAddress,LinkSpeed
Son 10 olay kaydını görüntüleyin
Get-WinEvent -LogName System -MaxEvents 10
17. Laboratuvar Çalışmaları
Laboratuvar 1
Get-Service nesnesinin tüm özelliklerini görüntüleyin.
Get-Service | Get-Member
Laboratuvar 2
Sadece çalışan servisleri bulun.
Get-Service |
Where-Object Status -eq Running
Laboratuvar 3
İlk 10 süreci listeleyin.
Get-Process |
Select-Object -First 10
Laboratuvar 4
Kendi kullanıcı nesnenizi oluşturun.
[PSCustomObject]@{
Ad="Ahmet"
Soyad="Yılmaz"
Departman="BT"
}
Laboratuvar 5
Servis listesini JSON biçimine dönüştürün.
Get-Service |
ConvertTo-Json
Bölüm Özeti
Bu bölümde:
PowerShell'in nesne tabanlı mimarisini ayrıntılı olarak öğrendiniz.
PropertyveMethodkavramlarını örneklerle incelediniz.Get-Memberile nesneleri analiz etmeyi öğrendiniz.PSCustomObjectveHashtablekullanarak kendi veri yapılarını oluşturdunuz.Pipelineboyunca nesnelerin nasıl aktarıldığını gördünüz.ForEach-Object,Where-ObjectveSelect-Objectile nesneleri işlediniz.Verileri CSV, JSON ve XML biçimlerine dönüştürerek raporlama ve veri alışverişi senaryolarını uyguladınız.
Bölüm 4: Değişkenler (Variables), Veri Tipleri ve Operatörler
Seviye: Başlangıç → Orta
Hedef: PowerShell'de değişken kullanımı, veri tipleri, tür dönüştürme (Type Casting), diziler (Arrays), koleksiyonlar ve operatörleri profesyonel seviyede öğrenmek.
İçindekiler
Değişken Nedir?
PowerShell'de Değişken Tanımlama
Veri Tipleri
Tür Dönüştürme (Type Casting)
Sabitler (Constants) ve Salt Okunur Değişkenler
Otomatik Değişkenler (Automatic Variables)
Ortam Değişkenleri (Environment Variables)
Diziler (Arrays)
ArrayList
Hashtable
Ordered Hashtable
PSCustomObject
Operatörler
Karşılaştırma Operatörleri
Mantıksal Operatörler
Düzenli İfadeler (Regex)
Null Değeri
Gerçek Sistem Yönetimi Senaryoları
Laboratuvar Çalışmaları
1. Değişken Nedir?
Değişken (Variable), bellekte veri saklamak için kullanılan isimlendirilmiş bir alandır.
PowerShell'de tüm değişkenler $ işareti ile başlar.
Örnek:
$Ad = "Nuri"
Değeri ekrana yazdıralım:
$Ad
Çıktı:
Nuri
2. Değişken Tanımlama
String
$Isim = "Ahmet"
Integer
$Yas = 30
Ondalıklı Sayı
$Maas = 45500.75
Boolean
$Aktif = $true
$Pasif = $false
Tarih
$Bugun = Get-Date
Yol
$Klasor = "C:\Windows"
3. Veri Tiplerini Öğrenme
Bir değişkenin veri tipini öğrenelim.
$Ad.GetType()
Çıktı:
IsPublic IsSerial Name
-------- -------- ----
True True String
Başka örnek:
$Yas.GetType()
Çıktı:
Int32
4. Temel Veri Tipleri
| Veri Tipi | Açıklama | Örnek |
|---|---|---|
| String | Metin | "Merhaba" |
| Int32 | Tam sayı | 25 |
| Int64 | Büyük tam sayı | 5000000000 |
| Double | Ondalıklı | 45.6 |
| Decimal | Finansal işlemler | 1250.45 |
| Boolean | Doğru/Yanlış | $true |
| DateTime | Tarih | Get-Date |
| Array | Dizi | 1,2,3 |
| Hashtable | Anahtar-Değer | @{} |
| PSCustomObject | Özel Nesne | [PSCustomObject]@{} |
5. Tür Dönüştürme (Type Casting)
Metni sayıya çevirelim.
[int]"50"
Sonuç:
50
Sayıyı metne çevirelim.
[string]150
Boolean
[bool]1
Sonuç:
True
Tarih
[datetime]"2026-07-17"
6. Matematik İşlemleri
$A = 15
$B = 4
Toplama
$A + $B
Çıktı
19
Çıkarma
$A - $B
Çarpma
$A * $B
Bölme
$A / $B
Mod
$A % $B
Üs Alma
[math]::Pow(2,10)
Çıktı
1024
7. Sabitler (Constant)
Normal değişken:
$Version = "1.0"
Sabit yapalım.
Set-Variable Version -Value "1.0" -Option Constant
Silmeye çalışırsanız hata alırsınız.
Salt okunur:
Set-Variable Firma -Value "OpenAI" -Option ReadOnly
8. Otomatik Değişkenler
PowerShell birçok hazır değişken sunar.
| Değişken | Açıklama |
|---|---|
$PSVersionTable | Sürüm bilgisi |
$HOME | Kullanıcı dizini |
$PWD | Geçerli dizin |
$PID | PowerShell işlem kimliği |
$HOST | Çalışan kabuk |
$Error | Son hatalar |
$true | Doğru |
$false | Yanlış |
$null | Boş değer |
$_ | Pipeline'daki mevcut nesne |
Örnek:
$HOME
Çalışma dizini:
$PWD
PowerShell sürümü:
$PSVersionTable
9. Ortam Değişkenleri
Windows ortam değişkenleri:
Get-ChildItem Env:
Belirli değişken:
$Env:PATH
Bilgisayar adı:
$Env:COMPUTERNAME
Kullanıcı:
$Env:USERNAME
İşlemci:
$Env:PROCESSOR_IDENTIFIER
Yeni ortam değişkeni:
$Env:LAB="PowerShell"
Bu yöntemle oluşturulan ortam değişkeni yalnızca mevcut PowerShell oturumu boyunca geçerlidir.
10. Array (Dizi)
$Sayilar = 10,20,30,40
İlk eleman:
$Sayilar[0]
Son eleman:
$Sayilar[-1]
Eleman sayısı:
$Sayilar.Count
Döngü:
foreach($Sayi in $Sayilar)
{
$Sayi
}
11. ArrayList
Normal diziler sabit uzunluktadır.
Dinamik liste:
$Liste = [System.Collections.ArrayList]::new()
Eleman ekleme:
$Liste.Add("Windows")
$Liste.Add("Linux")
$Liste.Add("Pardus")
Silme:
$Liste.Remove("Linux")
12. Hashtable
$Sunucu=@{
Host="SRV01"
IP="192.168.1.10"
SSH=22
OS="Windows"
}
Erişim:
$Sunucu.IP
13. Ordered Hashtable
Sıralı yapı:
$Bilgi=[ordered]@{
Ad="Ali"
Soyad="Yılmaz"
Gorev="Yönetici"
}
Bu yapı özellikle raporlama ve CSV oluştururken sütun sırasını korumak için faydalıdır.
14. PSCustomObject
$PC=[PSCustomObject]@{
Host="PC01"
IP="192.168.1.20"
RAM="16 GB"
Disk="512 GB SSD"
}
Gösterelim:
$PC
Belirli özellik:
$PC.RAM
15. Karşılaştırma Operatörleri
| Operatör | Açıklama |
|---|---|
| -eq | Eşittir |
| -ne | Eşit değildir |
| -gt | Büyüktür |
| -lt | Küçüktür |
| -ge | Büyük eşittir |
| -le | Küçük eşittir |
Örnek:
5 -gt 3
Sonuç:
True
16. Mantıksal Operatörler
-and
-or
-not
-xor
Örnek:
($true -and $false)
Sonuç:
False
17. Regex Operatörleri
İçeriyor mu?
"Nuri" -match "^N"
Sonuç:
True
Değiştir:
"PowerShell" -replace "Power","Windows"
Çıktı:
WindowsShell
Büyük/küçük harf duyarlı eşleştirme:
"PowerShell" -cmatch "Shell"
18. Null Kavramı
$Veri=$null
Kontrol:
if($null -eq $Veri)
{
"Boş"
}
$null değerini karşılaştırmalarda genellikle sol tarafta kullanmak ($null -eq $Veri) daha güvenli bir yaklaşımdır.
19. Gerçek Sistem Yönetimi Senaryoları
Bilgisayar bilgisi nesnesi
$Bilgisayar=[PSCustomObject]@{
Host=$Env:COMPUTERNAME
User=$Env:USERNAME
OS=(Get-ComputerInfo).WindowsProductName
RAM="16 GB"
}
Servis sayısı
$ServisSayisi=(Get-Service).Count
Çalışan servisler
$Calisan=Get-Service |
Where-Object Status -eq Running
Ağ adaptörlerini listeleme
$AgKartlari = Get-NetAdapter
En büyük süreç
$EnBuyuk = Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object -First 1
Günlük rapor
$Rapor=[PSCustomObject]@{
Tarih=Get-Date
Host=$Env:COMPUTERNAME
Process=(Get-Process).Count
Service=(Get-Service).Count
}
20. Laboratuvar Çalışmaları
Laboratuvar 1
Beş öğrenciden oluşan bir dizi oluşturun ve ekrana yazdırın.
$Ogrenciler = "Ali","Ayşe","Mehmet","Zeynep","Can"
$Ogrenciler
Laboratuvar 2
Bir PSCustomObject kullanarak aşağıdaki alanları içeren bir sunucu envanteri oluşturun:
Sunucu Adı
IP Adresi
İşletim Sistemi
RAM
Laboratuvar 3
$Env: sağlayıcısını kullanarak bilgisayar adı, kullanıcı adı ve PATH değişkenini görüntüleyin.
Laboratuvar 4
Bir dizideki sayıların ortalamasını hesaplayın.
İpucu:
$Sayilar = 10,20,30,40,50
$Sayilar | Measure-Object -Average
Laboratuvar 5
Aşağıdaki metnin "Windows" kelimesini "PowerShell" ile değiştirin:
Windows Server Administration
İpucu:
-replace
Siber Güvenlik Notu
PowerShell betikleri yazarken kullanıcıdan veya dış kaynaklardan gelen verileri doğrudan çalıştırmak yerine doğrulama yapmayı alışkanlık haline getirin. Ayrıca:
Betiklerde düz metin parola saklamaktan kaçının.
Hassas bilgileri
SecureStringveya uygun kimlik bilgisi yönetim yöntemleriyle koruyun.Düzenli ifadeler (
-match,-replace) ile kullanıcı girdilerini işlerken beklenmeyen desenlere karşı dikkatli olun.Üretim ortamında kritik işlemleri yapmadan önce
-WhatIfdesteği olan cmdlet'leri tercih edin.
Bölüm Özeti
Bu bölümde:
Değişken tanımlama ve veri tiplerini öğrendiniz.
Tür dönüştürme (Type Casting) uygulamaları yaptınız.
Otomatik ve ortam değişkenlerini kullandınız.
Diziler,
ArrayList,HashtablevePSCustomObjectile veri yapıları oluşturdunuz.Karşılaştırma, mantıksal ve düzenli ifade operatörlerini örneklerle incelediniz.
Gerçek sistem yönetimi senaryolarında değişkenleri kullanarak raporlama ve envanter oluşturmayı öğrendiniz.
Yorumlar