none
Error und Log Handling in Powershell Install Script RRS feed

  • Frage

  • Hi Leute

    Ich arbeite gerade an einem Powershell Script Template, welches man zukünftig verwenden sollte für die automatische Software Installation über die Softwareverteilung.

    Dafür habe ich verschiedene Funktionen erstellt (Install, Uninstall, Registry Modifikationen, usw.). Alles funktioniert soweit.

    Nun fehlt mir allerdings noch eine schlaue Error Auswertung. Habt ihr da Erfahrungen?

    Ich habe mich schon schlau gemacht über die verschiedenen Arten wie try & catch Blöcke oder Exception.Message.

    Sind try & catch blöcke für jeden Copy Befehl nicht zu übertrieben? Wie kann ich einen Error (Code?) abfangen/ausgeben, jedoch sollte das Script weiterlaufen?

    Beispiele:

    externer Programmaufruf (funktioniert soweit)

     $Rcode = Start-Process -Wait -FilePath ("C:\oeminst\PReplace.exe") -ArgumentList '-i c:\oeminst\canpc.dat c:\oeminst\SWSource\Reg\Reg32Hive\OSIMVar.reg' -Passthru
                 $global:LogText = $global:LogText + "..replace generic Bootparameter in OSIMVar.reg | Rcode = " + $Rcode.ExitCode + "`r`n"
    

    Error Handling bei Ordner kopieren (funktioniert nicht wirklich)

             If(!(test-path "C:\oeminst"))
                {
                New-Item -ItemType Directory -Force -Path "C:\oeminst" -ErrorVariable err -ErrorAction Stop
                 $global:LogText = $global:LogText + "..create folder C:\oeminst | Error = " + $err[0].Exception.Message + "`r`n"
                  $error.clear()
                }

    Könnt ihr mir da eure Best Practices weitergeben? :)

    Vielen herzlichen Dank und liebe Grüsse

    ynick

    Mittwoch, 20. September 2017 06:31

Antworten

  • Nun fehlt mir allerdings noch eine schlaue Error Auswertung. Habt ihr da Erfahrungen?

    Ja. Aber die sagen, daß so was mit einem generischen Template fast nie funktioniert, weil jede Anwendungsinstallation ihre eigenen Tücken hat...

    Sind try & catch blöcke für jeden Copy Befehl nicht zu übertrieben? Wie kann ich einen Error (Code?) abfangen/ausgeben, jedoch sollte das Script weiterlaufen?

    -ErrorAction oder try/catch oder trap. Und wo genau Du was nimmst - "kommt darauf an" :-)

    Beim Logging hab ich's mir übrigens sehr einfach gemacht: Einfach alles, was interessant ist, per Write-Host/-Debug/-Warning ausgeben und mit https://www.powershellgallery.com/packages/PowerShellLogging/1.3.0 in eine Datei schreiben. Spart unendlich Aufwand...

    Error Handling bei Ordner kopieren (funktioniert nicht wirklich)

    Was funktioniert daran nicht?

                        If(!(test-path "C:\oeminst"))
                             {
                             New-Item -ItemType Directory -Force -Path "C:\oeminst" -ErrorVariable err -ErrorAction Stop
                                $global:LogText = $global:LogText + "..create folder C:\oeminst | Error = " + $err[0].Exception.Message + "`r`n"
                                 $error.clear()
                             }

    -Erroraction Stop wirft imho keinen Terminating Error, das kannst per Try/Catch also nicht abfangen. Das ist eines der Probleme - welches Cmdlet wirft bei welchem Fehler welche Art von Error? :-) Aber das wissen andere sicher genauer.

    Und bei New-Item kriegst Du bei Erfolg ein Objekt zurück - das wäre meine Methode, das zu prüfen: Habe ich ein Objekt oder $null...

    Mittwoch, 20. September 2017 08:08
  • -Erroraction Stop wirft imho keinen Terminating Error, das kannst per Try/Catch also nicht abfangen.

    Ich dachte, genau dafür wäre Stop da?

    Wie dem auch sei, New-Item -ErrorAction Stop ist ein Terminating Error, gerade getestet.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Mittwoch, 20. September 2017 09:33

Alle Antworten

  • Nun fehlt mir allerdings noch eine schlaue Error Auswertung. Habt ihr da Erfahrungen?

    Ja. Aber die sagen, daß so was mit einem generischen Template fast nie funktioniert, weil jede Anwendungsinstallation ihre eigenen Tücken hat...

    Sind try & catch blöcke für jeden Copy Befehl nicht zu übertrieben? Wie kann ich einen Error (Code?) abfangen/ausgeben, jedoch sollte das Script weiterlaufen?

    -ErrorAction oder try/catch oder trap. Und wo genau Du was nimmst - "kommt darauf an" :-)

    Beim Logging hab ich's mir übrigens sehr einfach gemacht: Einfach alles, was interessant ist, per Write-Host/-Debug/-Warning ausgeben und mit https://www.powershellgallery.com/packages/PowerShellLogging/1.3.0 in eine Datei schreiben. Spart unendlich Aufwand...

    Error Handling bei Ordner kopieren (funktioniert nicht wirklich)

    Was funktioniert daran nicht?

                        If(!(test-path "C:\oeminst"))
                             {
                             New-Item -ItemType Directory -Force -Path "C:\oeminst" -ErrorVariable err -ErrorAction Stop
                                $global:LogText = $global:LogText + "..create folder C:\oeminst | Error = " + $err[0].Exception.Message + "`r`n"
                                 $error.clear()
                             }

    -Erroraction Stop wirft imho keinen Terminating Error, das kannst per Try/Catch also nicht abfangen. Das ist eines der Probleme - welches Cmdlet wirft bei welchem Fehler welche Art von Error? :-) Aber das wissen andere sicher genauer.

    Und bei New-Item kriegst Du bei Erfolg ein Objekt zurück - das wäre meine Methode, das zu prüfen: Habe ich ein Objekt oder $null...

    Mittwoch, 20. September 2017 08:08
  • -Erroraction Stop wirft imho keinen Terminating Error, das kannst per Try/Catch also nicht abfangen.

    Ich dachte, genau dafür wäre Stop da?

    Wie dem auch sei, New-Item -ErrorAction Stop ist ein Terminating Error, gerade getestet.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Mittwoch, 20. September 2017 09:33
  • Fehlerbehandlung ist hier (mal wieder Englisch) ganz gut erklärt:
    https://www.vexasoft.com/blogs/powershell/7255220-powershell-tutorial-try-catch-finally-and-error-handling-in-powershell

    Mittels Try/Catch kann ich ebenso TerminatingError's (siehe Link) abfangen und entsprechend, wenn es Sinn macht, darauf speziell reagieren.
    Abbruch-Fehler, die nicht abgefangen werden, führen eben zur Terminierung. Das gilt im Weitesten aber für jede Programmiersprache.

    Mittwoch, 20. September 2017 09:47