PowerShell ile KOBİ IT Otomasyonu: 10 Pratik Senaryo

Özet: KOBİ IT'sinde PowerShell ile otomasyon; 10 pratik senaryo, AD yönetimi, kullanıcı raporları ve günlük rutin script örnekleri.
Özet: PowerShell, Microsoft'un sistem yöneticileri için tasarladığı modern komut dili ve betikleme ortamıdır. Windows yerleşik gelir, ücretsiz, KOBİ IT ekibinin günlük rutinini saatlerden dakikalara indirebilir. Bu yazıda 10 pratik senaryo örneği sunuyoruz: toplu kullanıcı oluşturma, eski hesap raporu, disk dolma uyarı, dosya temizliği, BitLocker durum, MFA raporu, yazıcı listesi, log analizi, e-posta gönderimi, scheduled task. Her örnek KOBİ ölçeğinde gerçek bir ihtiyaca cevap verir; kopyala-uyarla-kullan formatında.
KOBİ IT'sinde "her ay aynı işi tekrar yapıyorum" hissiyatı yaygın. Yeni çalışanın AD hesabı oluşturma, eski hesap raporu, diskte dolu klasör tespiti, audit talepleri — hepsi tek tek manuel yapıldığında saatler sürer. PowerShell ile bu işler script'e döner; sonraki seferde tek komutla halledilir. PowerShell öğrenme yatırımı 1-2 hafta; karşılığında yıllarca verim sağlar.
Bu yazıda KOBİ ölçeğinde PowerShell otomasyon için 10 pratik senaryoyu kod örnekleriyle ele alıyoruz. Hedef kitlemiz IT yöneticileri, sistem yöneticileri ve manuel rutinleri otomatize etmek isteyen karar vericiler.
PowerShell Neden Önemli?
Avantajları
- Windows yerleşik (Win 7 sonrası)
- Ücretsiz
- Cmdlet'ler obje tabanlı (bash gibi metin değil)
- Modüler (Active Directory, Exchange, Azure modülleri)
- Cross-platform (PowerShell Core 7+ Linux/macOS'ta da)
- Geniş topluluk, hazır script kütüphaneleri
KOBİ Ölçeğinde Tipik Faydalar
- Toplu işlemler (50 kullanıcı oluşturma)
- Düzenli raporlar (haftalık, aylık)
- Otomasyon (Scheduled Task ile çalışan script'ler)
- API entegrasyonu
- Log analizi
PowerShell Temelleri (Hızlı Bakış)
Temel Cmdlet Yapısı
Verb-Noun -Parameter Value
Örnek:
Get-Service -Name Spooler
Get-Process | Where-Object {$_.CPU -gt 100}
Get-EventLog -LogName System -Newest 50
Pipe (|) Operatörü
Bir cmdlet çıktısını diğerine besleme:
Get-ADUser -Filter * | Where-Object {$_.Enabled -eq $true} | Export-Csv users.csv
Modüller
# AD modülü import (RSAT veya server)
Import-Module ActiveDirectory
# Exchange Online modülü
Install-Module -Name ExchangeOnlineManagement
Connect-ExchangeOnline
10 Pratik KOBİ Senaryosu
Senaryo 1: Toplu Yeni Kullanıcı Oluşturma
Yeni 5 çalışan başladı; CSV'den toplu oluşturma:
Import-Csv "C:\new_users.csv" | ForEach-Object {
$password = ConvertTo-SecureString $_.Password -AsPlainText -Force
New-ADUser `
-Name "$($_.FirstName) $($_.LastName)" `
-GivenName $_.FirstName `
-Surname $_.LastName `
-SamAccountName $_.UserName `
-UserPrincipalName "$($_.UserName)@firma.local" `
-EmailAddress $_.Email `
-Title $_.Title `
-Department $_.Department `
-Path "OU=Calisanlar,DC=firma,DC=local" `
-AccountPassword $password `
-Enabled $true `
-ChangePasswordAtLogon $true
Add-ADGroupMember -Identity "Tüm Çalışanlar" -Members $_.UserName
Write-Host "Kullanıcı oluşturuldu: $($_.UserName)" -ForegroundColor Green
}
CSV format:
FirstName,LastName,UserName,Email,Title,Department,Password
Mehmet,Yılmaz,myilmaz,myilmaz@firma.com,Satış Uzmanı,Satış,Tmp123!
Ayşe,Kaya,akaya,akaya@firma.com,Muhasebe,Finans,Tmp123!
Senaryo 2: 90+ Gün Logon Olmamış Hesaplar
Eski/inaktif hesap raporu:
$cutoffDate = (Get-Date).AddDays(-90)
Search-ADAccount -AccountInactive -TimeSpan 90 -UsersOnly |
Where-Object {$_.Enabled -eq $true} |
Select-Object Name, SamAccountName, LastLogonDate, Enabled |
Sort-Object LastLogonDate |
Export-Csv "C:\Reports\Inactive_Users_$(Get-Date -Format yyyy-MM-dd).csv" -NoTypeInformation
Write-Host "İnaktif kullanıcı raporu hazır" -ForegroundColor Yellow
Senaryo 3: Disk Dolma Uyarısı
Sunucu disklerini kontrol et, %85 üzerinde uyar:
$threshold = 85
$servers = "DC01", "FILESVR01", "SQL01", "BACKUP01"
foreach ($server in $servers) {
Get-WmiObject Win32_LogicalDisk -ComputerName $server -Filter "DriveType=3" |
ForEach-Object {
$usedPercent = [math]::Round((($_.Size - $_.FreeSpace) / $_.Size) * 100, 2)
if ($usedPercent -gt $threshold) {
$message = "UYARI: $server üzerinde $($_.DeviceID) doluluk %$usedPercent"
Write-Host $message -ForegroundColor Red
# E-posta uyarısı
Send-MailMessage -To "it@firma.com" -From "monitor@firma.com" `
-Subject "Disk Doluluk Uyarısı: $server" `
-Body $message -SmtpServer "smtp.firma.com"
}
}
}
Senaryo 4: 30 Gün Eskimiş Dosya Temizliği
Geçici klasörlerde 30+ gün dosya silme:
$tempPath = "D:\Temp"
$cutoffDate = (Get-Date).AddDays(-30)
Get-ChildItem -Path $tempPath -Recurse |
Where-Object {$_.LastWriteTime -lt $cutoffDate} |
ForEach-Object {
Write-Host "Siliniyor: $($_.FullName)"
Remove-Item $_.FullName -Force -Recurse -ErrorAction SilentlyContinue
}
Write-Host "Geçici dosya temizliği tamamlandı"
Senaryo 5: BitLocker Durum Raporu
Tüm domain bilgisayarlarının BitLocker durumu:
$computers = Get-ADComputer -Filter * -SearchBase "OU=Laptoplar,DC=firma,DC=local"
$report = foreach ($computer in $computers) {
if (Test-Connection -ComputerName $computer.Name -Count 1 -Quiet) {
$bitlocker = Invoke-Command -ComputerName $computer.Name -ScriptBlock {
Get-BitLockerVolume -MountPoint "C:" -ErrorAction SilentlyContinue
} -ErrorAction SilentlyContinue
[PSCustomObject]@{
ComputerName = $computer.Name
ProtectionStatus = $bitlocker.ProtectionStatus
EncryptionPercentage = $bitlocker.EncryptionPercentage
VolumeStatus = $bitlocker.VolumeStatus
}
}
}
$report | Export-Csv "C:\Reports\BitLocker_Status.csv" -NoTypeInformation
$report | Where-Object {$_.ProtectionStatus -ne "On"} | Format-Table
Senaryo 6: MFA Olmayan Hesaplar (M365)
Azure AD'de MFA aktif olmayan kullanıcılar:
# MgGraph modülü gerekli
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All"
$users = Get-MgUser -All
$mfaReport = foreach ($user in $users) {
$methods = Get-MgUserAuthenticationMethod -UserId $user.Id
$hasMfa = $false
foreach ($method in $methods) {
if ($method.AdditionalProperties["@odata.type"] -ne "#microsoft.graph.passwordAuthenticationMethod") {
$hasMfa = $true
break
}
}
[PSCustomObject]@{
UserPrincipalName = $user.UserPrincipalName
DisplayName = $user.DisplayName
MFAEnabled = $hasMfa
}
}
$mfaReport | Where-Object {$_.MFAEnabled -eq $false} |
Export-Csv "C:\Reports\MFA_Missing.csv" -NoTypeInformation
Senaryo 7: Print Server Kuyruk Temizliği
Yazdırma kuyruğunda takılan işleri temizle:
$printer = "Buro_Yazici_01"
# Stuck job'ları (1 saat üzeri) temizle
Get-PrintJob -PrinterName $printer |
Where-Object {$_.SubmittedTime -lt (Get-Date).AddHours(-1)} |
ForEach-Object {
Write-Host "Siliniyor: $($_.DocumentName) - $($_.UserName)"
Remove-PrintJob -InputObject $_
}
# Spooler servisini yeniden başlat
Restart-Service Spooler
Write-Host "Print Spooler yeniden başlatıldı"
Senaryo 8: Olay Günlüğü (Event Log) Analizi
Son 24 saatte sistem hatalarını topla:
$startTime = (Get-Date).AddHours(-24)
$errors = Get-WinEvent -FilterHashtable @{
LogName = 'System'
Level = 1, 2 # Critical, Error
StartTime = $startTime
}
$errorSummary = $errors | Group-Object -Property ProviderName |
Sort-Object -Property Count -Descending |
Select-Object -First 10 Count, Name
Write-Host "Son 24 saatte en çok hata veren kaynaklar:"
$errorSummary | Format-Table -AutoSize
# E-posta raporu
$body = $errors | Format-Table -AutoSize | Out-String
Send-MailMessage -To "it@firma.com" -From "monitor@firma.com" `
-Subject "Günlük Sistem Hata Raporu" `
-Body $body -SmtpServer "smtp.firma.com"
Senaryo 9: Otomatik E-posta Raporu
Aylık IT durum raporu (script'e koyup task'a ekle):
$reportDate = Get-Date -Format "yyyy-MM-dd"
$reportPath = "C:\Reports\Monthly_IT_$reportDate.html"
# Toplama
$totalUsers = (Get-ADUser -Filter *).Count
$totalComputers = (Get-ADComputer -Filter *).Count
$inactiveUsers = (Search-ADAccount -AccountInactive -TimeSpan 90 -UsersOnly).Count
$disabledUsers = (Search-ADAccount -AccountDisabled -UsersOnly).Count
# HTML rapor
$html = @"
<html>
<head><title>Aylık IT Raporu</title></head>
<body>
<h1>Aylık IT Durum Raporu - $reportDate</h1>
<table>
<tr><th>Metrik</th><th>Değer</th></tr>
<tr><td>Toplam Kullanıcı</td><td>$totalUsers</td></tr>
<tr><td>Toplam Bilgisayar</td><td>$totalComputers</td></tr>
<tr><td>İnaktif Kullanıcı (90+ gün)</td><td>$inactiveUsers</td></tr>
<tr><td>Devre Dışı Kullanıcı</td><td>$disabledUsers</td></tr>
</table>
</body>
</html>
"@
$html | Out-File $reportPath
Send-MailMessage -To "yonetim@firma.com" -From "it@firma.com" `
-Subject "Aylık IT Raporu" `
-Body $html -BodyAsHtml `
-SmtpServer "smtp.firma.com"
Senaryo 10: Scheduled Task ile Otomatik Çalıştırma
Script'i her gün 06:00'da çalıştır:
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-ExecutionPolicy Bypass -File C:\Scripts\daily_check.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "06:00"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest
Register-ScheduledTask -TaskName "Daily_IT_Check" `
-Action $action `
-Trigger $trigger `
-Principal $principal `
-Description "Günlük IT kontrol scripti"
Write-Host "Scheduled task oluşturuldu: Daily_IT_Check"
PowerShell Best Practices
Güvenlik
- Execution Policy: AllSigned (production)
- Script imzalama (kurum sertifikası)
- Hassas bilgiler (parolalar) Secret Store veya Credential Manager
- Logging: tüm script aktivitesi log
Yazım Stili
- Verb-Noun naming convention (Get-, Set-, Remove-)
- Comment'ler açıklayıcı
- Try/Catch ile error handling
- Verbose, WhatIf, Confirm parametreleri
Versioning
- Scripts Git'te (GitHub, GitLab)
- Değişiklik log'u
- Test ortamında dene, sonra production
Yamanlar Bilişim Olarak Sunduğumuz Hizmetler
KOBİ ölçeğinde PowerShell otomasyon destek alanlarımız:
- Mevcut manuel rutin denetimi
- Script geliştirme (özelleştirilmiş)
- Scheduled Task otomasyonu
- AD, Exchange, M365 script kütüphanesi
- Aylık/yıllık otomatik rapor
- IT ekibe PowerShell eğitimi
- Script güvenlik denetimi
Sıkça Sorulan Sorular
Sonuç
PowerShell; KOBİ IT'sinin günlük rutinini otomatize eden, ücretsiz, güçlü ve öğrenmesi pratik bir araçtır. 10 pratik senaryo örneği — toplu kullanıcı, eski hesap raporu, disk uyarı, BitLocker durum, MFA raporu, log analizi — günlük operasyonun büyük kısmını oluşturur ve PowerShell ile saatlerden dakikalara iner. IT ekibinin PowerShell yatırımı, KOBİ verimliliğinin en yüksek getirili kalemlerinden biridir.
Yamanlar Bilişim olarak ölçeğinize uygun script geliştirme, scheduled task otomasyonu ve IT ekip eğitimi hizmetleri sunuyor; tekrarlayan IT yükünüzü otomatize bir disipline çeviriyoruz.
Sıkça Sorulan Sorular
PowerShell öğrenmek ne kadar sürer?
KOBİ IT için temel: 1-2 hafta. AD modülü, dosya işlemleri, log analizi öğrenilir. İleri seviye (Exchange, Azure, REST API): 1-2 ay. Microsoft Learn, ücretsiz eğitim platformu — pratik öğrenme için yeterli.
Linux taki bash gibi mi?
Konsept benzer ama PowerShell obje tabanlı , bash metin tabanlı. PowerShell daha güçlü tip yönetimi, .NET entegrasyonu sunar. KOBİ ortamında Windows ağırlıklı + AD/Exchange/Azure entegrasyonu için PowerShell çok daha pratik.
PowerShell Core (7) mu yoksa Windows PowerShell (5.1) mı?
PowerShell 5.1 Windows yerleşik, AD modülü gibi Windows-only özellikler için uyumlu. PowerShell 7 (cross-platform) modern, hızlı, Linux/macOS ta da çalışır. KOBİ AD ağırlıklı: 5.1 kalır; modern bulut/Linux entegrasyon: 7. Çoğu zaman ikisi de yan yana kullanılır.
Script lerimi nasıl güvenli saklamalıyım?
Git repository (GitHub private, GitLab self-hosted) version control. Hassas bilgiler kod içinde değil, Azure Key Vault / Windows Credential Manager / SecretManagement modülünden okunur. Script imzalama (kurum CA) yetkisiz değişiklikleri önler.
KOBİ olarak başkasının script ini kullanmak güvenli mi?
GitHub, PowerShell Gallery den indirilen script ler — kaynak güvenilirliği önemli. Resmi Microsoft, popüler PSGallery modülleri (PSReadLine, dbatools) genelde güvenli. Bilinmeyen kaynak script leri mutlaka okunup test edilmeli. Kuruma uygulamadan önce test ortamında çalıştır.
Otomasyon ile manuel iş arasındaki dengeyi nasıl kurmalıyım?
Pareto kuralı: 1-2 saatlik script %50+ manuel iş kazanımı sağlıyorsa otomatize et. 10 dakikalık manuel iş için 10 saat script yazma anlamsız. Tekrarlayan, hata-prone (hata olabilen) işleri öncelikle otomatize et. Manuel kararı gerektiren işler (örnek karmaşık troubleshooting) script e dönüşmemeli.
Yazar
Serdar
Yamanlar Bilişim Uzmanı
Yamanlar Bilişim bünyesinde IT altyapısı, siber güvenlik ve dijital dönüşüm konularında içerikler üretmektedir. Sorularınız için iletişime geçebilirsiniz.
Profesyonel Destek
Bu konuda destek alın
Uç Nokta Yönetimi alanında ihtiyaç duyduğunuz çözümü birlikte tasarlayalım. Uzman ekibimiz 1 iş günü içinde size geri döner.
support@yamanlarbilisim.com.tr · Yanıt süresi: 1 iş günü
Devamını Oku
İlgili Makaleler

Asset Lifecycle Yönetimi: Cihaz Alımdan İmhaya 5 Aşama
KOBİ IT varlık yaşam döngüsü yönetimi; cihaz satın alma, kurulum, kullanım, yenileme ve KVKK uyumlu güvenli imha rehberi.

Microsoft Intune ile Cihaz Yönetimi: KOBİ Başlangıç Rehberi
Microsoft Intune nedir, KOBİ ölçeğinde nasıl kurulur; cihaz kaydı, uyumluluk politikaları, uygulama dağıtımı ve pratik senaryolar.

BitLocker Filo Yönetimi: KOBİ İçin Disk Şifreleme
BitLocker disk şifreleme; KOBİ filo yönetimi, anahtar yedekleme stratejisi, AD/Azure AD entegrasyonu ve operasyonel kontrol listesi.