Check for a Running Process on a Windows Machine

This is a quick and dirty method to check for a running process on a windows machine using Ruby.

require 'win32ole'
require 'net/smtp'
require 'yaml'

def send_email(message)
  begin
    msg = <<END_OF_MESSAGE
From: #{$from_alias} <#{$from}>
To: #{$to_alias} <#{$to}>
Subject: #{$subject}
#{message}
END_OF_MESSAGE

    Net::SMTP.start('smtp.company.com') do |smtp|
      smtp.send_message msg, $from, $to
    end
  rescue => error
    puts "Exception: #{error}"
  end
end

$from_alias = "Email Alias"
$from = "processWatcher@company.com"
$subject = "Process Error"
$to_alias = "Email Alias"
$to = "alerts@company.com"

#Server list
$proc = ["Server1", "Server2"]

$proc.each { |record|
  runningProc = false
  begin
    wmi = WIN32OLE.connect("winmgmts://#{record}")
    processes = wmi.ExecQuery("select * from win32_process")
  rescue => error
    puts "Exception: #{error}"
  end
  for process in processes do
    if (process.Name == "SampleProcess.exe")
      puts "Server: #{record} Name: #{process.Name}"
      runningProc = true
    end
  end

  if runningProc
    puts "Process on #{record} not running as of #{Time.now}. Please check the server."
    send_email("Process on #{record} not running as of #{Time.now}. Please check the server.")
  end
}



begin
  File.copy(line.strip, root + templine.strip)
rescue => error
  puts "Error Copying File: Exception: #{error}"
  error
end