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

  1. PowerShell Nedir?

  2. Neden PowerShell Öğrenmeliyiz?

  3. CMD ve PowerShell Arasındaki Farklar

  4. Windows PowerShell ve PowerShell 7

  5. PowerShell Mimarisi

  6. PowerShell Sürümleri

  7. PowerShell Konsolunu Tanıyalım

  8. İlk Komutlarımız

  9. Yardım Sistemi

  10. Komut Keşfetme

  11. Alias Kavramı

  12. PowerShell'in Çalışma Mantığı

  13. Object-Oriented Shell Kavramı

  14. Pipeline (Boru Hattı)

  15. İ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        CMDPowerShell
Çı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 istemi

  • C: → 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.

AliasGerçek Komut
lsGet-ChildItem
dirGet-ChildItem
pwdGet-Location
catGet-Content
cpCopy-Item
mvMove-Item
rmRemove-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

  1. Cmdlet Nedir?

  2. Verb-Noun Yapısı

  3. Onaylı (Approved) Fiiller

  4. Get-Command

  5. Get-Help

  6. Update-Help

  7. Show-Command

  8. Get-Member

  9. Parametre Kullanımı

  10. Common Parameters

  11. Pipeline Mantığı

  12. Select-Object

  13. Where-Object

  14. Sort-Object

  15. Measure-Object

  16. Format-Table

  17. Format-List

  18. Format-Wide

  19. Out-Host ve Out-File

  20. İlk Gerçek Sistem Yönetimi Senaryoları

  21. 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:

VerbNounAçıklama
GetProcessSüreçleri getir
GetServiceServisleri getir
StartServiceServisi başlat
StopServiceServisi durdur
RestartServiceServisi yeniden başlat
RemoveItemDosya sil
CopyItemDosya kopyala
RenameItemDosya yeniden adlandır
NewItemYeni 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ı:

VerbAnlamı
GetGetir
SetAyarla
NewOluştur
RemoveSil
StartBaşlat
StopDurdur
RestartYeniden Başlat
ClearTemizle
InvokeÇalıştır
TestTest Et
ExportDışa Aktar
Importİçe Aktar
CompareKarşılaştır
ConvertDö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 SilentlyContinue parametresi 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-Noun standardını öğrendiniz.

  • Get-Command ile komut keşfetmeyi öğrendiniz.

  • Get-Help ve Update-Help ile yardım sistemini etkin kullanmayı gördünüz.

  • Get-Member ile nesnelerin özelliklerini incelemeyi öğrendiniz.

  • Select-Object, Where-Object, Sort-Object ve Measure-Object cmdlet'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

  1. PowerShell Neden Nesne Tabanlıdır?

  2. Metin ve Nesne Arasındaki Fark

  3. Object (Nesne) Nedir?

  4. .NET ve PowerShell İlişkisi

  5. Property (Özellik) Kavramı

  6. Method (Metot) Kavramı

  7. Get-Member ile Nesneleri İnceleme

  8. Select-Object -ExpandProperty

  9. PSCustomObject

  10. Hashtable

  11. Pipeline'ın İç Yapısı

  12. ForEach-Object

  13. Where-Object Derinlemesine

  14. Özel Nesneler Oluşturma

  15. CSV, JSON ve XML ile Nesne Kullanımı

  16. Gerçek Sistem Yönetimi Senaryoları

  17. 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.

  • Property ve Method kavramlarını örneklerle incelediniz.

  • Get-Member ile nesneleri analiz etmeyi öğrendiniz.

  • PSCustomObject ve Hashtable kullanarak kendi veri yapılarını oluşturdunuz.

  • Pipeline boyunca nesnelerin nasıl aktarıldığını gördünüz.

  • ForEach-Object, Where-Object ve Select-Object ile 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

  1. Değişken Nedir?

  2. PowerShell'de Değişken Tanımlama

  3. Veri Tipleri

  4. Tür Dönüştürme (Type Casting)

  5. Sabitler (Constants) ve Salt Okunur Değişkenler

  6. Otomatik Değişkenler (Automatic Variables)

  7. Ortam Değişkenleri (Environment Variables)

  8. Diziler (Arrays)

  9. ArrayList

  10. Hashtable

  11. Ordered Hashtable

  12. PSCustomObject

  13. Operatörler

  14. Karşılaştırma Operatörleri

  15. Mantıksal Operatörler

  16. Düzenli İfadeler (Regex)

  17. Null Değeri

  18. Gerçek Sistem Yönetimi Senaryoları

  19. 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 TipiAçıklamaÖrnek
StringMetin"Merhaba"
Int32Tam sayı25
Int64Büyük tam sayı5000000000
DoubleOndalıklı45.6
DecimalFinansal işlemler1250.45
BooleanDoğru/Yanlış$true
DateTimeTarihGet-Date
ArrayDizi1,2,3
HashtableAnahtar-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şkenAçıklama
$PSVersionTableSürüm bilgisi
$HOMEKullanıcı dizini
$PWDGeçerli dizin
$PIDPowerShell işlem kimliği
$HOSTÇalışan kabuk
$ErrorSon hatalar
$trueDoğru
$falseYanlış
$nullBoş 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örAçıklama
-eqEşittir
-neEşit değildir
-gtBüyüktür
-ltKüçüktür
-geBüyük eşittir
-leKüçü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 SecureString veya 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 -WhatIf desteğ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, Hashtable ve PSCustomObject ile 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

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Etap 23 Yazıcı Kurulumu