erikro
Goto Top

Ty-catch will nicht so wie ich

Moin,

ich habe folgende Funktion:

function send-data2xxx {
    
    try {

        Out-File $log -InputObject "Versuch $($counter +1) die Datei zu verschicken." -Append -encoding utf8  
        Set-SCPItem -path $file -ComputerName $comp -Credential $cred -Destination $dest -Port 4711 -KeyFile $key -erroraction continue 2>&1 | out-file $log -append -encoding utf8 -ErrorAction continue

    }

    catch {

        if($counter -lt 10) {

            # Zehn Sekunden warten. Es wird ja einen Grund haben, warum es gerade nicht ging.
            Start-Sleep -Seconds 10
            $counter++
            send-data2xxx
            
        }
        else {

            Out-File $log -InputObject "Vorgang um $(get-date) endgültig abgebrochen." -append -Encoding utf8  
            send-mail2itservice -station $station

        }

    }
}

Sinn des Ganzen ist, eine Datei automatisiert einmal die Woche zu verschicken. Wie Ihr seht, soll das zehnmal versucht werden, bevor endgültig abgebrochen wird. Im catch steht deshalb der rekursive Aufruf der Funktion. Aber es will nicht so, wie ich das gerne hätte. Kommt es auf Grund eines falschen Keys (übergeben zum Testen) zu einem Fehler (hier das Log):

Log für 08/12/2021 13:04:00
Versuch 1 die Datei zu verschicken.
Set-SCPItem : Permission denied (publickey).
In send-data2xxx.ps1:71 Zeichen:9
+         Set-SCPItem -path $file -ComputerName $comp -Credenti ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Sicherheitsfehler: (Renci.SshNet.ScpClient:ScpClient) [Set-SCPItem], SshAuthenticationEx
   ception
    + FullyQualifiedErrorId : SSH.SetScpItem

dann wird nicht catch ausgeführt, sondern das Skript bricht so ab, als wäre es erfolgreich gelaufen. Versuch 2, 3 ... werden also nicht ausgeführt. Was mache ich falsch? Wahrscheinlich wieder irgend eine Tomate auf den Augen. face-wink

Noch zwei Infos:

Name                           Value
----                           -----
PSVersion                      5.1.19041.1151
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1151
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Genutzt wird das Modul posh-ssh direkt vom Repo aus installiert.

Liebe Grüße

Erik

Content-Key: 1148439033

Url: https://administrator.de/contentid/1148439033

Printed on: April 26, 2024 at 14:04 o'clock

Mitglied: 149062
Solution 149062 Aug 12, 2021 updated at 12:20:23 (UTC)
Goto Top
dann wird nicht catch ausgeführt, sondern das Skript bricht so ab, als wäre es erfolgreich gelaufen. Versuch 2, 3 ... werden also nicht ausgeführt. Was mache ich falsch? Wahrscheinlich wieder irgend eine Tomate auf den Augen.
Jepp du hast ihn (un)absichtlich provoziert face-wink.
-erroraction continue 2>&1
Der Fehler liegt ganz klar hier, weil du die Action mit continue weiterlaufen lässt wird bei einem Fehler keine echte Exception produziert und somit auch kein Catch Teil aufgerufen! Du musst die Action auf jeden Fall so stoppen lassen
-ErrorAction Stop
damit sie eine echte Exception wirft und dadurch der Catch Teil getriggert wird!

Virtuellen Kaffe rüber schieb.
LG /evo
Member: erikro
erikro Aug 12, 2021 at 12:46:50 (UTC)
Goto Top
Danke. Die Tomate von meinen Augen darfst Du behalten. face-wink
Mitglied: 149062
149062 Aug 12, 2021 updated at 13:06:25 (UTC)
Goto Top
Zitat von @erikro:

Danke. Die Tomate von meinen Augen darfst Du behalten. face-wink
Auf die Pizza schnibbel face-smile, schleck ....