×
Invoke-Command ile Yapılabilecekler

Invoke-Command ile Yapılabilecekler

Merhaba, bu yazımda sizlere Invoke-Command ile yapılabilecekler konusundan bahsedeceğim. PowerShell, sistem yöneticileri için güçlü bir araçtır ve iş akışlarını otomatikleştirmek için birçok özellik sunar. Bu özelliklerden biri olan Invoke-Command, uzak bilgisayarlarda komutlar çalıştırmanıza olanak tanır. Bu komut, büyük bir ağda merkezi bir kontrol sağlar ve özellikle uzak yönetim senaryolarında son derece faydalıdır. Bu makalede, Invoke-Command komutunun nasıl kullanılacağını detaylı bir şekilde inceleyeceğiz ve gerçek dünya örnekleriyle anlatacağız.

Microsoft tarafında aşağıdaki linki inceleyebilirsiniz.

Invoke Command

Invoke-Command Nedir?

Invoke-Command, PowerShell’in uzak bilgisayarlarda komut çalıştırmak için kullanılan bir cmdlet’idir. Bu komut sayesinde birden fazla bilgisayara aynı anda komut gönderebilir, çıktıları toplayabilir ve merkezi bir şekilde işlem yapabilirsiniz.

Temel kullanım şu şekildedir:

Invoke-Command -ComputerName “Server01” -ScriptBlock { Get-Process }

Yukarıdaki örnekte, Server01 isimli uzak bilgisayarda Get-Process komutunu çalıştırır ve sonuçları yerel makineye döndürür.

Temel Kullanım Senaryoları

1. Uzak Bilgisayarda Basit Komut Çalıştırma

En temel kullanım şekli, tek bir uzak bilgisayarda komut çalıştırmaktır. Örneğin, bir sunucudaki hizmetlerin durumunu kontrol etmek isteyebilirsiniz:

Invoke-Command -ComputerName “Server01” -ScriptBlock { Get-Service }

Bu komut, Server01 üzerinde çalışan tüm hizmetleri listeler.

2. Birden Fazla Bilgisayarda Komut Çalıştırma

Ağınızda birden fazla bilgisayara aynı komutu göndermek isteyebilirsiniz. Bu durumda, ComputerName parametresine birden fazla bilgisayar adı verebilirsiniz:

Invoke-Command -ComputerName “Server01”, “Server02”, “Server03” -ScriptBlock { Get-Service }

Bu komut, belirtilen üç sunucuda da Get-Service komutunu çalıştırır ve sonuçları toplar.

3. Parametrelerle ScriptBlock Kullanımı

Invoke-Command, ScriptBlock içinde parametre kullanmanıza da izin verir. Bu, daha dinamik komutlar çalıştırmanıza olanak tanır:

$scriptBlock = {

    param($serviceName)

    Get-Service -Name $serviceName}

Invoke-Command -ComputerName “Server01” -ScriptBlock $scriptBlock -ArgumentList “W32Time”

Bu örnekte, Server01 üzerindeki W32Time hizmetinin durumu kontrol edilir.

Gelişmiş Kullanım Senaryoları

1. Uzak İşlemleri Arka Planda Çalıştırma

Bazı durumlarda, bir uzak işlem başlatmak ve bu işlemi arka planda çalıştırmak isteyebilirsiniz. Bu tür işlemler için -AsJob parametresi kullanılabilir:

Invoke-Command -ComputerName “Server01” -ScriptBlock { Start-Sleep -Seconds 30; “Completed” } -AsJob

Bu komut, Server01 üzerinde 30 saniyelik bir bekleme süresi başlatır ve ardından “Completed” mesajını döndürür. İş arka planda çalıştığı için, bu komutun sonucunu almak için Receive-Job cmdlet’ini kullanabilirsiniz.

2. Uzak Bilgisayarlardan Dosya İndirme ve Yükleme

Invoke-Command, uzak bilgisayarlardan dosya indirmek veya yüklemek için kullanılabilir. Örneğin, uzak bir bilgisayardaki bir dosyayı yerel bilgisayarınıza kopyalamak için Copy-Item cmdlet’i kullanılabilir:

Invoke-Command -ComputerName “Server01” -ScriptBlock { Copy-Item “C:\RemoteFolder\File.txt” -Destination “\\LocalPC\SharedFolder” }

Bu komut, Server01 üzerindeki File.txt dosyasını yerel bilgisayarınızda paylaşılan bir klasöre kopyalar.

3. Uzak Bilgisayarlarda Yazılım Kurulumu

Bir ağ üzerinde aynı yazılımı birden fazla bilgisayara kurmanız gerektiğinde Invoke-Command son derece kullanışlıdır. Örneğin, bir MSI dosyasını uzak bilgisayarlara kurmak isteyebilirsiniz:

$computers = “Server01”, “Server02”, “Server03”

$msiPath = “\\SharedFolder\Software.msi”

Invoke-Command -ComputerName $computers -ScriptBlock {

    Start-Process msiexec.exe -ArgumentList “/i”, $using:msiPath, “/quiet”, “/norestart” -Wait}

Bu komut, belirtilen sunucularda Software.msi dosyasını sessizce yükler.

4. Uzak Bilgisayarlarda Güç Yönetimi

Uzak bilgisayarları kapatma veya yeniden başlatma işlemleri de Invoke-Command ile yapılabilir. Örneğin, bir sunucuyu yeniden başlatmak için:

Invoke-Command -ComputerName “Server01” -ScriptBlock { Restart-Computer -Force }

Bu komut, Server01 sunucusunu zorla yeniden başlatır.

Güvenlik ve Yetkilendirme

Invoke-Command kullanırken, güvenlik ve yetkilendirme kritik öneme sahiptir. Bu komut, uzak bilgisayarlarda komut çalıştırdığı için uygun yetkilere sahip olmanız gerekir. Bunun için -Credential parametresi ile farklı bir kullanıcı adı ve şifre kullanabilirsiniz:

$cred = Get-Credential

Invoke-Command -ComputerName “Server01” -ScriptBlock { Get-Process } -Credential $cred

Bu örnekte, Server01 üzerinde Get-Process komutunu çalıştırmak için belirttiğiniz kimlik bilgilerini kullanırsınız.

Invoke-Command, PowerShell’de uzak yönetim için son derece esnek ve güçlü bir cmdlet’tir. Bu makalede, temel ve gelişmiş kullanım senaryoları ile bu komutun gücünü ve çok yönlülüğünü inceledik. Invoke-Command, özellikle geniş ağlarda ve sunucu çiftliklerinde merkezi yönetim sağlamak için vazgeçilmez bir araçtır. Uzak bilgisayarlarda komut çalıştırma, yazılım yükleme, dosya transferi ve sistem yönetimi gibi işlemleri otomatikleştirmek için kullanabileceğiniz bu komut, zaman kazandırır ve verimliliği artırır.

Bir domain’de bir bilgisayara yerel yönetici (local admin) eklemek için invoke-command komutunu kullanabilirsiniz. Aşağıda bu işlemi gerçekleştirmek için kullanabileceğiniz PowerShell komutu bulunmaktadır:

Invoke-Command -ComputerName “TargetComputerName” -ScriptBlock {

    Add-LocalGroupMember -Group “Administrators” -Member “DomainName\UserName”

} -Credential (Get-Credential)

Açıklamalar:

  • Invoke-Command: Uzaktan bir bilgisayarda komut çalıştırmak için kullanılır.
  • -ComputerName “TargetComputerName”: Yerel yönetici eklemek istediğiniz bilgisayarın adını girin.
  • -ScriptBlock {}: Bu blok içine çalıştırılacak komutları yerleştiriyoruz.
  • Add-LocalGroupMember -Group “Administrators” -Member “DomainName\UserName”: Belirtilen kullanıcıyı yerel yönetici grubuna ekler. DomainName\UserName yerine doğru değerleri girin.
  • -Credential (Get-Credential): Gerekli kimlik doğrulama bilgilerini girmek için bu parametreyi kullanın.

Bu komutu çalıştırırken, hedef bilgisayarın uzaktan yönetim için yapılandırılmış olduğundan emin olmalısınız. Bu yazımda sizlere Invoke-Command ile yapılabilecekler 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