2016-04-15 10 views
0

Ich schrieb ein VBScript, um die kritischen Prozessdetails von Server zu finden.Ich habe wenige Prozessnamen, wenn dieser Prozess dann das Skript sollte die erwähnte Ausgabe geben.Aber das Problem ist hier, obwohl wenn der Prozess existiert oder nicht vorhanden das Skript gibt die gleiche Ausgabe wie "CriticalProcesses = NA". Kann jemand helfen, das zu beheben? Jede Hilfe ist sehrVbscript zu kritischen Prozess zu finden

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 

Antwort

0

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 
+0

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

+0

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

+0

ist die unter methord korrekt – SNair