Kurumsal IT ortamında çalışırken fark ediyorsunuz: bazı işler her hafta, hatta her gün tekrarlanıyor. Hangi makineler güncel değil? Hangi kullanıcılar aktif? Disk dolmak üzere mi? Bunları tek tek elle kontrol etmek hem zaman kaybı hem de hata riski. İşte PowerShell bu noktada devreye giriyor.
Çalıştığım ekipte Windows 11 geçişi sürecinde tam olarak bunu yaşadık. Yüzlerce makine arasından hâlâ Windows 10 çalıştıranları tek tek bulmak yerine, AD üzerinden tüm bilgisayarları sorgulayıp işletim sistemi bilgisine göre filtreledik. Birkaç satır PowerShell, saatlerce sürebilecek manuel işi dakikaya indirdi.
PowerShell nedir, neden önemli?
PowerShell, Microsoft’un geliştirdiği komut satırı kabuğu ve betik dilidir. Windows’un tüm kurumsal bileşenleriyle — Active Directory, dosya sistemi, ağ, servisler — doğrudan konuşabilir. Basit komutlardan karmaşık otomasyonlara kadar geniş bir yelpazede kullanılır.
IT uzmanları için en büyük avantajı şu: öğrenme eğrisi görece düşük, ama yapabilecekleriniz son derece geniş. Birkaç temel komut setini öğrendikten sonra kendi ihtiyaçlarınıza özel scriptler yazmak çok daha kolay hale geliyor.
Gerçek senaryo: AD üzerinde Windows 10 kalan makineleri listeleme
Windows 11 geçişi planlarken ilk adım envanter çıkarmaktı — hangi makineler hâlâ Windows 10 çalıştırıyor? Bunu AD üzerinden PowerShell ile şöyle yaptık:
# AD'deki tüm bilgisayarları sorgula, Windows 10 olanları filtrele
Get-ADComputer -Filter * -Properties Name, OperatingSystem, OperatingSystemVersion |
Where-Object { $_.OperatingSystem -like "*Windows 10*" } |
Select-Object Name, OperatingSystem, OperatingSystemVersion |
Sort-Object Name |
Export-Csv -Path "C:\Raporlar\Win10_Makineler.csv" -NoTypeInformation -Encoding UTF8
Çıktı olarak CSV dosyası alıyorsunuz — makine adı, işletim sistemi ve sürüm bilgisiyle. Bu listeyi sistem ekibine iletmek, geçiş planını yapmak çok daha kolay hale geliyor.
💡 İpucu: Bu scripti çalıştırmak için Active Directory modülünün yüklü olması gerekiyor. Kurumsal ortamda domain controller’a bağlı bir makinede
Import-Module ActiveDirectorykomutuyla modülü aktif edebilirsiniz.
Diğer işe yarar otomasyon senaryoları
Disk kullanımını tüm sunucularda kontrol etme
Disk dolmadan önce uyarı almak için:
# Belirli bir eşiğin üzerindeki diskleri raporla
$sunucular = @("SUNUCU01", "SUNUCU02", "SUNUCU03")
$esik = 80 # Yüzde
foreach ($sunucu in $sunucular) {
$diskler = Get-WmiObject Win32_LogicalDisk -ComputerName $sunucu -Filter "DriveType=3"
foreach ($disk in $diskler) {
$kullanim = [math]::Round(($disk.Size - $disk.FreeSpace) / $disk.Size * 100, 1)
if ($kullanim -gt $esik) {
Write-Host "UYARI: $sunucu - $($disk.DeviceID) diski %$kullanim dolu" -ForegroundColor Red
}
}
}
AD’de devre dışı kullanıcıları listeleme
Uzun süredir giriş yapmayan veya devre dışı bırakılmış hesapları temizlemek için:
# 90 gündür giriş yapmayan aktif kullanıcılar
$tarih = (Get-Date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -lt $tarih -and Enabled -eq $true} `
-Properties LastLogonDate, Department |
Select-Object Name, SamAccountName, LastLogonDate, Department |
Export-Csv -Path "C:\Raporlar\Eski_Kullanicilar.csv" -NoTypeInformation -Encoding UTF8
Servis durumunu kontrol etme
Kritik servislerin çalışıp çalışmadığını uzaktan kontrol etmek için:
# Belirli bir servisin durumunu kontrol et
$servisler = @("Spooler", "W32Time", "Netlogon")
$sunucu = "SUNUCU01"
foreach ($servis in $servisler) {
$durum = Get-Service -ComputerName $sunucu -Name $servis -ErrorAction SilentlyContinue
if ($durum.Status -ne "Running") {
Write-Host "$servis servisi $sunucu üzerinde çalışmıyor!" -ForegroundColor Red
} else {
Write-Host "$servis çalışıyor." -ForegroundColor Green
}
}
Toplu kullanıcı oluşturma
Yeni işe başlayan çalışanlar için CSV’den toplu kullanıcı oluşturmak:
# kullanicilar.csv: Ad, Soyad, Departman sütunları olmalı
Import-Csv "C:\kullanicilar.csv" | ForEach-Object {
$kullaniciAdi = "$($_.Ad.ToLower()).$($_.Soyad.ToLower())"
New-ADUser `
-Name "$($_.Ad) $($_.Soyad)" `
-GivenName $_.Ad `
-Surname $_.Soyad `
-SamAccountName $kullaniciAdi `
-UserPrincipalName "$kullaniciAdi@firma.local" `
-Path "OU=$($_.Departman),DC=firma,DC=local" `
-AccountPassword (ConvertTo-SecureString "Gecici@2026" -AsPlainText -Force) `
-Enabled $true
Write-Host "$kullaniciAdi oluşturuldu." -ForegroundColor Green
}
⚠ Dikkat: Toplu işlem yapan scriptleri önce test ortamında deneyin. Özellikle kullanıcı oluşturma, silme veya değiştirme işlemlerinde geri dönüşü olmayan sonuçlar doğabilir.
-WhatIfparametresi, scriptin ne yapacağını gerçekten çalıştırmadan önce gösterir.
PowerShell’e nasıl başlanır?
- Windows PowerShell ISE veya VS Code kullanın — script yazımı çok daha kolay.
- Get-Help komutunu öğrenin — her komutun kullanımını yerinde açıklar:
Get-Help Get-ADComputer -Examples - Küçük başlayın — önce tek bir işlemi komutla yapın, sonra script haline getirin.
- Microsoft Learn üzerindeki PowerShell modülleri ücretsiz ve kapsamlı başlangıç noktası.
Sonuç
PowerShell, IT uzmanının en değerli araçlarından biri — öğrenme maliyeti düşük, geri dönüşü yüksek. Kurumsal ortamda Windows 11 geçişinde yüzlerce makineyi saniyeler içinde listelemek, disk dolmadan uyarı almak, devre dışı kullanıcıları otomatik raporlamak — bunların hepsi birkaç satır scriptle mümkün. Tekrarlayan her işte kendinize şunu sorun: “Bunu PowerShell ile otomatikleştirebilir miyim?” Çoğu zaman cevap evet.