Das Problem hier ist zu erkennen, dass Sie durch Ihre Prozesse in einem for-Schleife iterieren und dann testen Sie die Prozessnamen außerhalb der Schleife. Ihr If instr(process..
Bit prüft nur den letzten Prozess, der von Ihrer for
Schleife gefunden wird.
Um zu beheben, stecken Sie den if
Test in Ihre Schleife, so dass es jeden gefundenen Prozess testen kann.
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
Ich habe mich verändert auch deine Else If
zu einem ElseIf
und entfernt den unnötigen zweiten End If
.
Schließlich habe ich das Echo in Ihrem Else
auskommentiert, da Sie wahrscheinlich nicht das Skript Echo
immer und immer wieder wollen. Zumindest ... Ich war nicht zu hip beim Drücken Enter 200 mal.
zu erfassen, ob ein wls
oder database
Typ-Prozess ausgeführt wird und dann echo nur einmal am Ende, können Sie die wahr/falsch für jeden Typen in einer Booleschen Variable erfassen, dann Test nach die for
Schleife : wenn mehrere java.exe präsentiert gibt es mehrere Ergebnisse
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
Dim hasDBProcess
Dim hasWLSProcess
hasDBProcess = False
hasWLSProcess = False
For Each objItem In colItems
'WScript.Echo "Caption: " & objItem.Caption
Dim process
Process = objItem.Caption
If inStr(process, "SQLserver") Or inStr(process, "mysql") Then
hasDBProcess = True
ElseIF inStr(process, "java") Or inStr(process, "weblogic") Then
hasWLSProcess = True
End If
Next
If hasDBProcess Then
wscript.echo "CriticalProcess=Database"
ElseIf hasWLSProcess Then
wscript.echo "CriticalProcess=wls"
Else
wscript.echo "CriticalProcess=NA"
End if
Dank much.Now das Skript working.but als Anfang, wenn die Bedingung in der Schleife ist und auch erfordern i sogar NA zu drucken, wenn kein Prozess erwähnt verfügbar – SNair
so anstatt in der for-Schleife zu widerhallen, ma Verwenden Sie einfach einen booleschen Wert, um zu erfassen, ob Sie einen Prozess vom Typ wls oder Datenbanktyp gefunden haben, und testen Sie dann außerhalb des Tests boolean und echo. Ich werde ein Beispiel in meiner Antwort geben. – JNevill
ist die unter methord korrekt – SNair