Vbscript找到关键进程

时间:2016-04-15 16:53:44

标签: vbscript

我写了一个vbscript来查找来自server的关键进程详细信息。如果该进程存在则我的进程名称很少,那么脚本应该给出上面提到的输出。但是这里的问题是即使进程存在或不存在脚本提供与" CriticalProcesses = NA" 相同的输出。有人可以帮忙解决这个问题吗?非常感谢任何帮助

   strComputer = "."
   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", _
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)

   For Each objItem In colItems
   'WScript.Echo "Caption: " & objItem.Caption

      Dim process

      Process = objItem.Caption

   Next

   If inStr(process, "SQLserver") Or inStr(process, "mysql") then

      wscript.echo "CriticalProcesses=Database"

   else if inStr(process, "java") Or inStr(process, "weblogic") Then

      wscript.echo "CriticalProcesses=wls"

   else

      wscript.echo "CriticalProcesses=NA"

   End if        
End if 

1 个答案:

答案 0 :(得分:0)

这里的问题是你在for循环中迭代你的进程,然后在循环之外测试进程名。因此,您的If instr(process..位只检查从for循环中找到的最后进程。

要修复,请将if测试粘贴到循环中,以便它可以测试它找到的每个进程。

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", _
    wbemFlagReturnImmediately + wbemFlagForwardOnly)

For Each objItem In colItems
    'WScript.Echo "Caption: " & objItem.Caption
    Dim process
    Process = objItem.Caption

    If inStr(process, "SQLserver") Or inStr(process, "mysql") Then
        wscript.echo "CriticalProcesses=Database"
    ElseIF inStr(process, "java") Or inStr(process, "weblogic") Then
        wscript.echo "CriticalProcesses=wls"
    Else
        'wscript.echo "CriticalProcesses=NA"
    End If
Next

我还将您的Else If更改为ElseIf并删除了不必要的第二个End If

最后,我在Else中注释了回音,因为您可能不希望脚本一遍又一遍地{@ 1}} Echo。至少......我没有按下Enter键200次。

要捕获NAwls类型进程是否正在运行,然后仅在结束时回显一次,您可以捕获布尔变量中每种类型的true / false,然后测试 database循环之后:

for