2016-04-10 11 views
1

Ich habe das folgende Skript erstellt, aber es gibt nur 0 zurück, sogar Fehler im DNS-Test zu finden.Pipeline-Skript vbs

Dim consult, objShell 

Set objShell = WScript.CreateObject ("WScript.shell") 

consult = objShell.run ("dcdiag /test:DNS | findstr /i failed", 0) 

If consult = "0" THEN 
    WScript.Echo "OK" 
else 
    WScript.Echo "ERROR" 
end If 

Ich verstehe, dass nicht die findstr läuft.

Vielen Dank.

Antwort

0
  • Sie verwenden nicht "Option Explicit"; das ist leichtsinnig.
  • Sie nicht in der Nähe/unmittelbar nach Ihrer Dims; das ist fehleranfällig.
  • Sie verwenden Variablen (objShell) nur einmal; das ist verschwenderisch.
  • Sie mischen Datentypen (Ganzzahl vs Zeichenfolge) in einem Vergleich; das ist blöd.
  • Sie lesen die Dokumente nicht (sorgfältig); das ist unverschämt.

Vom Docs:

bWaitOnReturn

Optional. Boolescher Wert, der angibt, ob das Skript auf warten soll, bis das Programm die Ausführung beendet hat, bevor es mit der nächsten Anweisung in Ihrem Skript fortgesetzt wird. Wenn der Wert auf "true" festgelegt ist, wird die Skriptausführung angehalten, bis das Programm beendet wird und "Run" den vom Programm zurückgegebenen Fehlercode zurückgibt. Wenn sie auf false gesetzt ist (der Standardwert), gibt die Run-Methode unmittelbar nach dem Start des Programms aus und gibt automatisch 0 zurück (nicht , um als Fehlercode interpretiert zu werden).

Um unnötigen Probleme durch fehlende dcdiag oder verschiedene Versionen von findstr oder mis Verständnis/Nutzung dieser Programme verursacht zu vermeiden, ich "minimal Errorlevel-Setter" verwenden:

type ex0.vbs, ex1.vbs 

ex0.vbs 
WScript.Quit 0 

ex1.vbs 
WScript.Quit 1 

und diesen Code:

Option Explicit 

Dim consult : consult = WScript.CreateObject("WScript.Shell").Run("%comspec% /c ex0.vbs | ex1.vbs", 0, True) 

If consult = "0" THEN 
    WScript.Echo consult, "OK" 
else 
    WScript.Echo consult, "ERROR" 
end If 

Ausgang:

cscript 36531325.vbs 
1 ERROR 

Verwenden

.Run("ex0.vbs | ex1.vbs", 0, True) 

zu sehen, dass Sie eine Shell (% comspec%) benötigen eine Shell-Funktionen zu verwenden (|) und

.Run("%comspec% /c ex0.vbs | ex1.vbs", 0) 

für eine besseres Verständnis der Bedeutung des bWaitOnReturn Parameters.