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-ID: 1148439033

Url: https://administrator.de/forum/ty-catch-will-nicht-so-wie-ich-1148439033.html

Ausgedruckt am: 29.03.2025 um 07:03 Uhr

149062
Lösung 149062 12.08.2021 aktualisiert um 14:20:23 Uhr
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
erikro
erikro 12.08.2021 um 14:46:50 Uhr
Goto Top
Danke. Die Tomate von meinen Augen darfst Du behalten. face-wink
149062
149062 12.08.2021 aktualisiert um 15:06:25 Uhr
Goto Top
Zitat von @erikro:

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