2010-01-07 63 views
2

目前與WMI的Win32_Process的, 我似乎無法檢測到,如果一個批處理文件,目前正在運行如何使用WMI發現正在運行的批處理(.bat)文件名?

所有它列出的CMD.EXE的的CommandLine,沒有告訴我具體的CMD.EXE運行該批處理文件。 有人有任何見解嗎?

代碼片段(紅寶石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 

    } 

回答

2
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 

看到更多在此鏈接: http://rubyonwindows.blogspot.com/2007/07/using-ruby-wmi-to-get-win32-process.html

下面是我的輸出,而TEST.CMD運行:

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

我真的很喜歡這個代碼 - 如果你有一個test.cmd運行她的窗戶 ex: contents bash -c'sleep 1000' 還是什麼不? -r – rogerdpack 2010-01-07 21:42:57

+0

我所做的只是將test.cmd作爲唯一的命令暫停。它在我的機器上爲我工作。 Windows XP - 紅寶石1.8.6。它不適合你嗎? – Beanish 2010-01-08 03:25:44

+0

有趣。它對.cmd有效,但不適用於.bat [?] 甜 - 至少我有一個命名所有.bat文件.cmd的工作:) -r – rogerdpack 2010-01-08 21:31:01

相關問題