×
Domain Ortamında Uzak Sunucularda PowerShell Invoke-Command vs PsExec

Domain Ortamında Uzak Sunucularda PowerShell Invoke-Command vs PsExec

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 İndir

Domain-Ortaminda-Uzak-Sunucularda-PowerShell-Invoke-Command-vs-PsExec1 Domain Ortamında Uzak Sunucularda PowerShell Invoke-Command vs PsExec

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.


 

1988 İstanbul doğumluyum. Bilgisayar dünyasına olan hayranlığım çok küçük yaşlarda başladı. Bu sebeple sistem alanında kendimi geliştirmeye karar verdim. Celal Bayar Üniversitesi Bilgisayar Programcılığı ve Anadolu Üniversitesi İşletme mezunuyum. Beykent Üniversitesi'nde Yönetim Bilişim Sistemleri Bölümü'nde yüksek lisans eğitimimi tamamladım. 2005 yılında Bilge Adam Sistem & Network Mühendisliği eğitimi aldım. Hemen ardından IT dünyasına giriş yaptım. Collezione şirketinde 2006 - 2018 yılları arasında Sistem Uzmanı olarak görev yaptım. 2018 Temmuz ayından beri LCWAIKIKI şirketinde System Engineer pozisyonunda çalışmaktayım. Sektörde 19 yıllık deneyime sahibim. Birçok önemli projede görev aldım. Sayfanın en alt kısmından Linkedin profilime ulaşabilirsiniz. Bilgi ve tecrübemi hem bu blog üzerinde hem de Çözümpark Bilişim Portalı üzerinde paylaşıyorum.

Yorum gönder