PowershellDomain Ortamında Uzak Sunucularda PowerShell Invoke-Command vs PsExec
Yapay Zeka ile Dinle
3 dk okuma · Türkçe sesli anlatım
Dağcan Nural
Yazar
Merhaba, bu yazımda sizlere uzak sunucularda PsExec ve Invoke-Command kullanımı konusundan bahsedeceğim. Domain ortamında uzak sunucular üzerinde servis başlatma, durdurma veya yeniden başlatma işlemleri, günlük operasyonlarımızdan bazılarıdır. Domain ortamında çalışan sistemlerde bu işlemleri uzaktan yönetmenin başlıca iki yöntemi öne çıkar: PowerShell Invoke-Command ve Sysinternals aracı olan PsExec.
Bu makalede, her iki yöntemi detaylı olarak ele alacak, adım adım kullanım örnekleriyle birlikte karşılaştırmalı bir bakış sunacağız. Hangi yöntemin sizin altyapınıza daha uygun olduğuna karar verebilmek size kalmış bir seçenektir.
PowerShell Invoke-Command ile Uzak Sunucularda Servis Yönetimi
Invoke-Command, PowerShell Remoting (WinRM) altyapısını kullanarak bir veya birden fazla uzak sunucuda komut çalıştırmanızı sağlar. Özellikle domain içi yönetimlerde en sık kullanılan araçlardan biridir.
PowerShell Remoting’i Etkinleştirme
Yerel bilgisayarda:
Enable-PSRemoting -Force
GPO üzerinden yaygınlaştırmak isterseniz:
GPO Yolu
Computer Configuration> Policies > Administrative Templates > Windows Components > Windows Remote Management > WinRM Service
Firewall Kuralı Açma
Enable-NetFirewallRule -Name “WINRM-HTTP-In-TCP”
Servis Başlatma
Invoke-Command -ComputerName “SunucuAdi” -ScriptBlock {
Start-Service -Name “servisAdi”
}
Servis Yeniden Başlatma
Invoke-Command -ComputerName “SunucuAdi” -ScriptBlock {
Restart-Service -Name “servisAdi” -Force
}
Toplu Sunuculara Uygulama
$servers = @(“SRV01”, “SRV02”, “SRV03”)
$serviceName = “w32time”
foreach ($server in $servers) {
Invoke-Command -ComputerName $server -ScriptBlock {
param($svc)
Restart-Service -Name $svc -Force
} -ArgumentList $serviceName
}
PsExec ile Uzak Sunucularda Servis Başlatma ve Restart Etme
PsExec, Microsoft’un Sysinternals araçları arasında yer alır ve uzak bir bilgisayarda yerel komut satırı üzerinden işlem yapmanızı sağlar. PowerShell Remoting kullanmak istemeyen veya kullanamayan sistemler için ideal bir alternatiftir.
PsExec İndir ve Kur
psexec.exe dosyasını bir klasöre çıkarın. Örnek: C:\Tools\
Komut satırında o klasöre geçin:
cd C:\Tools
Servis Başlatma
psexec \\SunucuAdi sc start “ServisAdi”
Servis Yeniden Başlatma
psexec \\SunucuAdi cmd /c “sc stop ServisAdi && sc start ServisAdi”
Farklı Kullanıcıyla Çalıştırmak
psexec \\SunucuAdi -u DOMAIN\admin -p sifre cmd /c “sc stop ServisAdi && sc start ServisAdi”
Toplu Sunuculara Uygulama (PowerShell ile)
Sunucu listesi (servers.txt)
- SRV-DC01
- SRV-DB01
- SRV-APP01
$servers = Get-Content -Path “C:\scripts\servers.txt”
foreach ($srv in $servers) {
Start-Process -FilePath “C:\Tools\PsExec.exe” -ArgumentList “\\$srv cmd /c `”sc stop w32time && sc start w32time`””
}
Hangi Yöntemi Ne Zaman Kullanmalıyım?
| Kriter | Invoke-Command (WinRM) | PsExec |
| Domain içi güvenli bağlantı | ✅ | ✅ (ama şifre açık girilir) |
| Güvenlik (Kerberos/NTLM) | ✅ | ⚠️ |
| Script ile otomasyon | ✅ | ✅ |
| Hızlı ve doğrudan uygulama | ⚠️ | ✅ |
| Kurulum gereksinimi | WinRM açık olmalı | PsExec sadece EXE dosyasıyla |
| Firewall uyumluluğu | WinRM port 5985 | SMB ve RPC (C$ paylaşımı) |
Invoke-Command için
- “Access denied” → Admin yetkisi veya WinRM yapılandırması eksik olabilir.
- “Connection refused” → Firewall kontrol edilmeli.
PsExec için
- “Access is denied” → C$ paylaşımı, admin yetkisi, veya antivirüs kontrol edilmeli.
- PsExec komutları mutlaka yönetici olarak çalıştırılmalı.
Domain ortamında uzaktaki sunucular üzerinde servis başlatmak, durdurmak veya yeniden başlatmak için hem Invoke-Command hem de PsExec kullanımı mümkündür. Eğer WinRM ortamınız hazırsa ve merkezi yönetim istiyorsanız PowerShell Invoke-Command önerilir. Ancak hızlı bir çözüm arıyorsanız ya da WinRM devre dışıysa PsExec güçlü bir alternatiftir.
İhtiyacınıza göre her iki yöntemi de betiklerle otomatik hale getirebilir, yüzlerce sunucuyu saniyeler içinde yönetebilirsiniz.
PsExec kullanımı güvenli mi?
Evet, Microsoft tarafından geliştirilmiştir ancak şifre açık girildiği için dikkatli olunmalıdır.
PsExec mi Invoke-Command mı daha hızlı?
PsExec daha hızlıdır ama güvenlik açısından PowerShell remoting tercih edilmelidir.
PowerShell ile PsExec birleştirilebilir mi?
Evet, PowerShell içinden Start-Process ile PsExec komutlarını çalıştırabilirsiniz.
Bu yazımda sizlere domain ortamında uzak sunucularda PsExec ve Invoke-Command ile servis başlatma konusundan bahsettim. Faydalı olması dileğiyle.
Bu makaleyi paylaş:
Etiketlere Göre İlgili Makaleler
Yorumlar
0 yorum
Henüz yorum yok. İlk yorumu siz yapın!

