我写了一个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
答案 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次。
要捕获NA
或wls
类型进程是否正在运行,然后仅在结束时回显一次,您可以捕获布尔变量中每种类型的true / false,然后测试 database
循环之后:
for