Tüm sahaya PS üzerinden Pstools kullanarak komut göndermek

Tüm sahaya PS üzerinden Pstools kullanarak komut göndermek


Senaryo şöyle olsun. 1000 kullanıcımız var ve bazı kullanıcıların bilgisayarları bilgisayarı kapat butonuna basmasına rağmen kapanmıyor ve bilgisayar sürekli uyku moduna giriyor. hiç kapanmayan bu bilgisayarlarda windows güncellemeleri, antivirüs güncellemeleri, 3. tafaf güncellemeler bilgisayar yeniden başlamadığı için yapılamıyor. 

ve sahada bu tarz 100 veya daha fazla bilgisayarınız var. hepsine tek tek bağlanıp komut satırından şu kodu çalıştırmanız gerekmekte. 


powercfg -h off 

yada uzaktaki bilgisayarlarda bir servisi yeniden başlatmanız gerek.

NET START ITSMService gibi  

Bu işi otomatize yapmanız için gerekenler.

Pstools' u bilgisayarınıza indirin ve C:\PSTools içine kurun.

Pstools klasörü içinde LOG adında bir klasör oluşturun.
Hangi Bilgisayara bağlanacağımızı yazdığımız birde txt dosyası oluşturalım adı da  TumsahaCihazlari.txt olsun.

---------------------------------------------------------------------------------------------

$psexec_path = "C:\PSTools\PsExec.exe"
$logpath = "C:\PSTools\LOG"

# $cmd = "NET START ITSMService"
$cmd = "powercfg -h off"


$logfile = "C:\PSTools\LOG\LOG_"+ ( Get-Date -format "yyyyMMddHHmm") +".txt" 

Add-Content $logfile ("Service Control : " + (Get-Date -format "dd.MM.yyyy HH:mm"))

foreach($pc in Get-Content "C:\PSTools\TumsahaCihazlari.txt") 
{
   
    $process_info = New-Object System.Diagnostics.ProcessStartInfo
    $process_info.RedirectStandardError = $true
    $process_info.RedirectStandardOutput = $true
    $process_info.UseShellExecute = $false
    $process_info.FileName = $psexec_path
    $process_info.Arguments = "\\$pc $cmd"

    $process = New-Object System.Diagnostics.Process
    $process.StartInfo = $process_info
    $process.Start() | Out-Null

    $process.WaitForExit();

    $log = ""
    if($process.ExitCode -ne 0)
    {
      if ($process.ExitCode -eq 2 ) 
      {
           $log= "Zaten Çalışıyor"
      }
      else 
      {
          if ($process.ExitCode -eq 6) 
          {
            $log =  "Erişim Engellendi Ulaşılamadı"
          }     
          else
          {
            $log = "Bilinmeyen Hata " + $process.ExitCode
          }
      }
    }
    else
    {
        $log = "Script başarı ile çalıştırıldı"
    }
    Write-host ($pc + ":  " + $log)
    
    if($process.ExitCode -ne 2)
    {
        Add-Content $logfile ($pc + ": " + $log)
    }

}

Send-MailMessage -Attachments $logfile -To "info@ferhatyildiz.com"  -from "info@ferhatyildiz.com" -Subject "ITSMService Report" -Body "ITSMService Report ektedir." -SmtpServer "smtp.gmail.com"

------------------------------------------------------------------------------------------

Hepsi bu kadar. Bu kodu ps1 olarak kaydedin ve powershell ile çalıştırın.