Search code examples
rubywmiwin32-process

how to use WMI to discover a running batch (.bat) filename?


Currently with WMI's Win32_Process, I seem unable to detect if a batch file is currently running

all it lists is CommandLine of cmd.exe, without telling me which batch file that particular cmd.exe is running. Anybody have any insights there?

code snippet (ruby-wmi)

many_args = 'batch_file.bat'
procs = WMI::Win32_Process.find(:all)
procs.each{|proc|
  if (proc.CommandLine.contain?(many_args)) || proc.Name.include?(many_args) # never succeeds

      ...

   end

  }

Solution

  • require 'win32ole'
    
    many_args = "test.cmd"
    
    wmi = WIN32OLE.connect("winmgmts://")
    
    processes = wmi.ExecQuery("select * from win32_process")
    
    processes.each do |process|
      if process.CommandLine != nil && process.CommandLine.include?(many_args) then
        puts process.inspect
        puts "Name: #{process.Name}"
        puts "CommandLine: #{process.CommandLine}"
        puts "CreationDate: #{process.CreationDate}"
        puts "WorkingSetSize: #{process.WorkingSetSize}"
      end
    end
    

    see more at this link: http://rubyonwindows.blogspot.com/2007/07/using-ruby-wmi-to-get-win32-process.html

    The following is my output while the test.cmd is running:

    #<WIN32OLE:0x2b8f360>
    Name: cmd.exe
    CommandLine: cmd /c ""C:\wmi test\test.cmd" "
    CreationDate: 20100108083948.497052-300
    WorkingSetSize: 1593344