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.

Öne çıkarılan içerikler