Ich möchte VBScript verwenden, um Fehler abzufangen und zu protokollieren (dh bei Fehler "etwas protokollieren") und dann die nächste Zeile des Skripts fortzusetzen.
Beispielsweise,
On Error Resume Next 'Führen Sie Schritt 1 aus 'Führen Sie Schritt 2 aus 'Führen Sie Schritt 3 aus
Wenn in Schritt 1 ein Fehler auftritt, möchte ich, dass dieser Fehler protokolliert wird (oder andere benutzerdefinierte Funktionen damit ausgeführt werden) und dann in Schritt 2 fortgesetzt wird. Ist dies möglich? und wie kann ich es implementieren?
EDIT: Kann ich so etwas machen?
Bei Fehler Setzen Sie myErrCatch fort 'Führen Sie Schritt 1 aus 'Führen Sie Schritt 2 aus 'Führen Sie Schritt 3 aus myErrCatch: 'Protokollfehler Weiter Weiter
vbscript
error-handling
apandit
quelle
quelle
Antworten:
VBScript hat keine Vorstellung davon, Ausnahmen auszulösen oder abzufangen, aber die Laufzeit stellt ein globales Err-Objekt bereit, das die Ergebnisse der zuletzt ausgeführten Operation enthält. Sie müssen nach jeder Operation explizit prüfen, ob die Err.Number-Eigenschaft ungleich Null ist.
Die Syntax "On Error Goto [label]" wird von Visual Basic und Visual Basic für Applikationen (VBA) unterstützt, VBScript unterstützt diese Sprachfunktion jedoch nicht, sodass Sie On Error Resume Next wie oben beschrieben verwenden müssen.
quelle
err.clear
nach jeder Überprüfung des Objekts verwendet werden muss, um zu verhindern, dass frühere Fehler die nächste Überprüfung auslösen (z. B. technet.microsoft.com/en-us/library/ee692852.aspx ), wird meiner Erfahrungerr
nach " von selbst "im Verlauf des Skripts. Ohne weitere Tests zu verwenden, schätze ich, dass Objekt-Clearingserr
als Nebenprodukt ihrer internen Operationen verwendet werden.Err.Clear
.Beachten Sie, dass dies
On Error Resume Next
nicht global festgelegt ist. Sie können Ihren unsicheren Teil des Codes, z. B. in eine Funktion einfügen, die bei Auftreten eines Fehlers sofort unterbrochen wird, und diese Funktion von einem Sub mit einer vorhergehendenOERN
Anweisung aufrufen .quelle
Sie können Ihre Schritte Funktionsaufrufe in einer Fassadenfunktion neu gruppieren:
Lassen Sie dann Ihre Fehlerbehandlung in einer oberen Funktion sein, die die Fassade aufruft:
Nehmen wir nun an, es wird
step3()
ein Fehler ausgelöst. Dafacade()
keine Fehler behandeln (es gibt keineOn error resume next
infacade()
), wird der Fehler wieder aufmain()
undstep4()
undstep5()
wird nicht ausgeführt.Ihre Fehlerbehandlung wird jetzt in 1 Codeblock überarbeitet
quelle
Ich bin außergewöhnlich neu in VBScript, daher wird dies möglicherweise nicht als bewährte Methode angesehen, oder es gibt einen Grund, warum dies nicht so gemacht werden sollte, wie ich es noch nicht kenne, aber dies ist die Lösung, die ich zum Trimmen gefunden habe Reduzieren Sie die Menge an Fehlerprotokollierungscode in meinem Hauptcodeblock.
quelle