我是vbs的新手,但已经在c,c ++ n java中完成了编程。我试过通过互联网搜索,但我仍然无法找到我错在哪里。我正在创建一个脚本来杀死名为rundll的进程,如果它超过20%的CPU使用率。
Option Explicit
DIM MyPID(5), objProcess, objItems, objitem
DIM XX, I
XX = -1
dim objService
set objService = getobject("winmgmts:")
dim Process
for each Process in objService.InstancesOf("Win32_process")
if Process.Name = "rundll32.exe" Then XX = XX + 1
if Process.Name = "rundll32.exe" Then MyPID(XX) = Process.processid
Next
For I = 0 To 5
Set objProcess = GetObject("winmgmts:{impersonationLevel=impersonate}//localhost")
Set objItems = objProcess.ExecQuery("Select PercentProcessorTime from Win32_PerfFormattedData_PerfProc_Process where IDProcess=" &MyPID(I)& "")
if (IsNull(objItems)) Then
Wscript.Echo "No process found"
Exit For
End if
for each objItem in objItems
if objItems = Null Then
Wscript.Echo "No process found"
elseif objItem>20 Then Wscript.Echo "Criminal process found :" & MyPID(I) & " = " & objItem.PercentProcessorTime
End if
NEXT
NEXT
如果脚本没有找到进程,它应该打印没有找到进程,而不是我现在得到的复杂的空警报
任何帮助都将受到赞赏,所以非常好的建议
答案 0 :(得分:0)
不要枚举特定PID的PercentProcessorTime
,而是尝试枚举超过阈值的进程,并在名称与条件匹配时终止它们:
Set wmi = GetObject("winmgmts://./root/cimv2")
perfQuery = "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process " & _
"WHERE PercentProcessorTime >= 20"
For Each p In wmi.ExecQuery(perfQuery)
pidQuery = "SELECT * FROM Win32_Process WHERE ProcessId = " & p.IDProcess
For Each p1 In wmi.ExecQuery(pidQuery)
If p1.Name = "rundll32.exe" Then p1.Terminate
Next
Next