Hallo zusammen,
ich möchte auftretende Fehler der $error Variable innerhalb von scripten gerne in eine Logdatei schreiben. (Das untere script wird dann eine Funktion).
Es soll der Lesbarkeit halber aber nicht die gesamte $error Variable gespeichert werden. Nur die Zeit, ein Absatz, der Fehler und die “InvocationInfo.PositionMessage“ der Variable sollen pro Fehler gespeichert werden.
Das funktioniert auch schon recht gut, allerdings habe ich das Problem das array der “InvocationInfo.PositionMessages“ richtig unter die eigentliche Fehlermeldung zu schreiben. Es wird immer nur die erste PosittionMessage des arrays eingetragen. Die eigentlichen Fehlermeldungen hingegen werden vom letzten Fehler beginnend korrekt eingetragen .
- Kann mir hier jemand einen Hinweis geben was ich falsch mache?
- G es eine Möglichkeit die Fehler plus dazugehöriger PositionMessage „rückwärts“, also mit dem ersten Fehler im script beginnend einzutragen? (Nicht so wichtig).
- Ist das so überhaupt der richtige Ansatz, oder wie schreiben die Profis hier ihre Fehlermeldungen in eine Logdatei?
Danke für euren Input!
Sönke
$error. Clear() # Evtl. vorhandene Fehler löschen, wird entfernt, wenn script funktioniert # Anfang Testscript, welches Fehler erzeugt. Nur ein Beispiel, Error-Log soll für jegliche Form von scripten laufen Copy-Item c:\gib\es\nicht d:\bla Copy-Item c:\gib\es\auch\nicht d:\bla\bla Copy-Item c:\gib\es\ebenfalls\nicht d:\bla\bla\bla Copy-Item c:\gib\es\ebenfalls\auch\nicht d:\bla\bla\bla # Ende Testscript $Mistake = $error.ToArray() # Umwandelen der Error-Variable in ein array und setzen einer neuen Variable $array = ($error.InvocationInfo.PositionMessage) # Schon als array vorhandene PositionMessage in Variable schreiben foreach ($Message in $array) {} # Versuch, die einzelnen "PositionMessages" zu seperieren foreach # Versuch, den Fehler mit Zeit, Absatz und PositionMessage in ein Log zu schreiben ($passage in $Mistake) {"$( get-date -UFormat %d.%m.%Y-%T) $([System.Environment]::NewLine) $passage" + "$Message $([System.Environment]::NewLine)" | Out-File 'c:\temp\logs\MyError.log' -append} $error. Clear() #vermutlich unnötig, da Error-Variable nach beendigung des scriptes automatisch gelöscht wird.