Windows PowerShell ile Temel Sunucu Yönetimi Komutları
Windows PowerShell ile Temel Sunucu Yönetimi Komutları
Giriş
Günümüzde Windows Server tabanlı altyapıların yönetimi, komut satırı araçları ve otomasyon becerileriyle çok daha verimli hâle geliyor. Grafiksel arayüzler ne kadar kullanıcı dostu olursa olsun, büyük ölçekli sunucu parklarının günlük işletimi, ayarların merkezi yönetimi ve tekrarlayan görevlerin otomasyonu için PowerShell vazgeçilmez bir araçtır. PowerShell; .NET Framework üzerine inşa edilmiş, nesne tabanlı çıktılar üreten güçlü bir kabuk ve betik dilidir. Bu rehberde Windows PowerShell kullanarak sunucu yönetiminde en çok ihtiyaç duyacağınız temel komutları, ortam hazırlığından kullanıcı ve servis yönetimine; günlük bakım görevlerinden güvenlik denetimlerine kadar ayrıntılı biçimde ele alacağız.
PowerShell Ortamını Hazırlama ve Modüller
Sunucunuzda PowerShell’e erişmek için Başlat menüsünden “Windows PowerShell” veya “PowerShell ISE” (Entegre Betik Ortamı) uygulamasını çalıştırabilirsiniz. Windows Server 2016 ve üzeri sürümlerde PowerShell 5.x varsayılan olarak gelirken, PowerShell Core (7.x) paketini GitHub’dan indirip .NET Core üzerinde çalıştırabilirsiniz.
Modül Yükleme:
Sunucu rollerine özel cmdlet’ler yüklemek için Install-WindowsFeature veya Install-Module komutlarını kullanın. Örneğin Active Directory modülü:
Install-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
Get-Module -ListAvailable ile sisteminizdeki modülleri listeleyip Import-Module <ModülAdı> ile yükleyebilirsiniz.
Dosya Sistemi ve Klasör Yönetimi
Sunucu üzerindeki dizinlerle çalışmak için Get-ChildItem, Set-Location, Copy-Item, Move-Item, Remove-Item cmdlet’leri temel komutlardır.
Klasör İçeriğini Listeleme:
Get-ChildItem -Path C:\InetPub\wwwroot -Recurse | Where-Object {$_.Extension -eq “.log”}
Bu komut, .log uzantılı tüm dosyaları alt dizinler dahil arar.
Klasör Geçişi ve Oluşturma:
Set-Location C:\Scripts
New-Item -Path . -Name “Yedekler” -ItemType Directory
Yedek Kopyası Alma:
Copy-Item -Path C:\Data\* -Destination D:\Backup\Data -Recurse -Force
-Force var olan dosyaları üzerine yazar, -Recurse alt klasörleri de kapsar.
Kullanıcı ve Grup Yönetimi
Sunucu üzerindeki kullanıcı ve grup işlemleri için Active Directory modülü veya yerel kullanıcı yönetimi kullanabilirsiniz.
Yerel Kullanıcı Oluşturma:
New-LocalUser -Name “sunucuadmin” -Password (ConvertTo-SecureString “P@ssw0rd!” -AsPlainText -Force) -FullName “Sunucu Yöneticisi” -Description “Yetkili sunucu yöneticisi hesabı”
Add-LocalGroupMember -Group “Administrators” -Member “sunucuadmin”
AD Kullanıcı İşlemleri:
New-ADUser -Name “Alice Yılmaz” -SamAccountName “ayilmaz” -AccountPassword (ConvertTo-SecureString “GucluParola123!” -AsPlainText -Force) -Enabled $true -Path “OU=Kullanicilar,DC=domain,DC=com”
Add-ADGroupMember -Identity “SunucuAdmins” -Members “ayilmaz”
Şifre Sıfırlama:
Set-ADAccountPassword -Identity “ayilmaz” -Reset -NewPassword (ConvertTo-SecureString “YeniP@ss123” -AsPlainText -Force)
Servis ve Süreç Yönetimi
Sunucu servislerinin yönetimi, Get-Service, Start-Service, Stop-Service, Restart-Service ile sağlanır.
Servis Durumu Kontrolü:
Get-Service -Name “W3SVC”
Servis Başlatma/Durdurma:
Start-Service -Name “MSSQLSERVER”
Stop-Service -Name “MSSQLSERVER” -Force
Restart-Service -Name “MSSQLSERVER”
Otomatik Başlatma Ayarı:
Set-Service -Name “MSSQLSERVER” -StartupType Automatic
Süreç İzleme ve Sonlandırma:
Get-Process -Name “notepad”
Stop-Process -Name “notepad” -Force
Günlük (Log) Yönetimi ve Olay İzleme
Sunucu günlükleri, sorun tespiti için kritiktir. Get-EventLog ve Get-WinEvent cmdlet’leriyle olay kayıtlarını inceleyebilirsiniz.
Eski Güvenlik Olaylarını Görüntüleme:
Get-EventLog -LogName Security -After (Get-Date).AddDays(-1) | Where-Object {$_.EventID -eq 4625}
bu komut son 24 saatteki başarısız oturum açma denemelerini listeler.
Günlük Dosyalarından Belirli Metrikleri Almak:
Get-WinEvent -FilterHashtable @{LogName=”Application”; Level=2} -MaxEvents 100
Level=2 hata seviyesini, 3 uyarı seviyesini temsil eder.
Olay Abone Olma:
Register-ObjectEvent -InputObject (Get-EventLog -LogName System -Newest 1) -EventName EntryWritten -Action { Write-Host “Yeni sistem olayı:” $event.SourceEventArgs.Entry }
Disk ve Depolama Yönetimi
Disk bölümlendirme, hızlı kontrol ve raporlama için Get-Disk, Get-Volume, New-Partition, Format-Volume kullanılabilir.
Disk Listesi ve Boyut Bilgisi:
Get-Disk | Select-Object Number, FriendlyName, OperationalStatus, Size
Get-Volume | Select-Object DriveLetter, FileSystem, SizeRemaining, Size
Yeni Bölüm Oluşturma ve Biçimlendirme:
$disk = Get-Disk -Number 1
New-Partition -DiskNumber $disk.Number -UseMaximumSize -AssignDriveLetter | Format-Volume -FileSystem NTFS -NewFileSystemLabel “YedekDisk”
Ağ Yapılandırması ve İzleme
Get-NetAdapter, Get-NetIPAddress, New-NetIPAddress, Set-DnsClientServerAddress komutlarıyla ağ yetkilendirmesi ve izleme yapılabilir.
Ağ Bağdaştırıcı Durumları:
Get-NetAdapter | Format-Table Name, Status, LinkSpeed
Statik IP Atama:
New-NetIPAddress -InterfaceAlias “Ethernet0” -IPAddress 192.168.1.50 -PrefixLength 24 -DefaultGateway 192.168.1.1
Set-DnsClientServerAddress -InterfaceAlias “Ethernet0” -ServerAddresses (“8.8.8.8″,”8.8.4.4”)
Ağ Trafiği İzleme:
Get-NetTCPConnection -State Established | Group-Object -Property RemoteAddress | Sort-Object Count -Descending | Select-Object Name, Count -First 10
Bu komut aktif bağlantıları IP adresine göre sayar ve en fazla bağlantı kurulan 10 adresi listeler.
Uzak Yönetim ve PowerShell Remoting
PowerShell Remoting ile birden fazla sunucuyu merkezi olarak yönetebilirsiniz. Enable-PSRemoting komutuyla servisi açın, New-PSSession ile oturum başlatın.
Remoting Etkinleştirme:
Enable-PSRemoting -Force
Set-Item WSMan:\localhost\Client\TrustedHosts -Value “Sunucu1,Sunucu2” -Force
Uzak Oturum Açma:
$s = New-PSSession -ComputerName Sunucu1 -Credential (Get-Credential)
Invoke-Command -Session $s -ScriptBlock { Get-Service -Name W3SVC }
Remove-PSSession -Session $s
Zamanlanmış Görevler (Scheduled Tasks)
Görev zamanlamak için Register-ScheduledTask, Get-ScheduledTask, Unregister-ScheduledTask kullanılır.
Günlük Yedekleme Görevi Oluşturma:
$action = New-ScheduledTaskAction -Execute “PowerShell.exe” -Argument “-File C:\Scripts\GunlukBackup.ps1”
$trigger = New-ScheduledTaskTrigger -Daily -At 03:00AM
Register-ScheduledTask -TaskName “GunlukBackup” -Action $action -Trigger $trigger -Description “Her gün sabah 3’te yedek al”
Görev Silme:
Unregister-ScheduledTask -TaskName “GunlukBackup” -Confirm:$false
Güvenlik Denetimleri ve Hardening İpuçları
Sunucunuzun güvenliğini artırmak için güvenlik duvarı, güncelleme ve politika yönetimi önemlidir.
Windows Update Durumu Kontrolü:
Get-WindowsUpdateLog
Güvenlik Duvarı Kuralı Ekleme:
New-NetFirewallRule -DisplayName “SSH” -Direction Inbound -Action Allow -Protocol TCP -LocalPort 22
Parola Politikası ve Kilitleme Ayarları:
Set-ADDefaultDomainPasswordPolicy -Identity domain.com -ComplexityEnabled $true -LockoutThreshold 5 -LockoutDuration (New-TimeSpan -Minutes 15)
Betik ve Otomasyon Örnekleri
PowerShell betikleriyle rutin görevleri otomatikleştirmek zaman kazandırır. Örneğin haftalık disk alanı raporu:
$report = Get-Volume | Select-Object DriveLetter, @{Name=”KalanGB”;Expression={“{0:N2}” -f ($_.SizeRemaining/1GB)}}, @{Name=”ToplamGB”;Expression={“{0:N2}” -f ($_.Size/1GB)}}
$report | Out-File “\\Server\Share\Raporlar\DiskAlanRaporu_$(Get-Date -Format yyyyMMdd).txt”
En İyi Uygulamalar
Her PowerShell komutunu çalıştırmadan önce -WhatIf ve -Confirm parametreleriyle etkisini test edin. Kritik betikleri versiyon kontrolüne alın. Yedekleme, log tutma ve hata yönetimi için Try/Catch bloklarını kullanın. GUI’li sunucularda da Server Manager yerine PowerShell tercih etmek yönetim sürecini hızlandırır ve betiklerle tekrarlanabilir kılar.
Sonuç
Windows PowerShell, sunucu yönetiminde esneklik, hız ve otomasyon imkânı sunan güçlü bir araç setidir. Dosya sistemi yönetiminden kullanıcı ve grup işlemlerine; servis kontrolünden olay günlüğü incelemelerine; ağ yapılandırmadan zamanlanmış görevlere kadar her adımı PowerShell ile gerçekleştirebilir, hem zamandan tasarruf eder hem de insan hatasını minimize edebilirsiniz. Bu rehberde ele alınan temel komutlar ve ipuçlarıyla kendi sunucularınıza hızlıca hakim olun. Düzenli olarak betikler yazarak, modül ve sürüm güncellemelerini takip ederek PowerShell becerilerinizi bir üst seviyeye taşıyın. Sunucu yönetimindeki verimliliğiniz ve güvenliğiniz, yazdığınız her satır PowerShell koduyla artacaktır.