PowerShell ile IT Otomasyonu: Tekrarlayan İşleri Otomatikleştirin

Anasayfa » PowerShell ile IT Otomasyonu: Tekrarlayan İşleri Otomatikleştirin

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 ActiveDirectory komutuyla 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. -WhatIf parametresi, 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.