Aufrufende Funktion beenden
Hallo zusammen,
ich bin nun dabei etwas Errorhandling zu machen und dabei stoße ich auf ein mehr oder weniger kleines Problemchen.
Ich habe eine Funktion die mehrere Programmaufrufe durchläuft. Nach jedem Programmaufruf fange ich den Errorcode ab und prüfe ob dieser ungleich 0 ist. Wenn also ein Fehler vorhanden war, dann soll er mir erstmal einen Eintrag ins Log schreiben und dann die aufrufende Funktion beenden, sodass keine weiteren Programmaufrufe dort stattfinden.
Wenn er nun Hauptskrip1 ausführt und dort den ersten Start-Batch ausgeführt hat und dieser auf einen Fehler getreten ist, sodass $ErrorCode ungleich 0. Dann soll er Hauptskript1 beenden und mit Hautpskript2 weitermachen.
Frag ist, wie ich das am besten anstelle. Mit Return beende ich eine Funktion, allerdings müsste ich dann jeden Start-Batch mit einer IF Anweisung umschliesen und schauen was die Funktion Start-Batch zurückgiebt und dann je nachdem return oder weitermachen.
Am besten wäre es, wenn man irgendwie in der Function Start-Batch so Wert gleich mitgeben kann, der die aufrufende Funktion beendet.
Oder gibt es da sogar einen eleganteren Weg dies zu lösen?
ich bin nun dabei etwas Errorhandling zu machen und dabei stoße ich auf ein mehr oder weniger kleines Problemchen.
Ich habe eine Funktion die mehrere Programmaufrufe durchläuft. Nach jedem Programmaufruf fange ich den Errorcode ab und prüfe ob dieser ungleich 0 ist. Wenn also ein Fehler vorhanden war, dann soll er mir erstmal einen Eintrag ins Log schreiben und dann die aufrufende Funktion beenden, sodass keine weiteren Programmaufrufe dort stattfinden.
function Start-Hauptskript1()
{
Start-Batch -JobID 1234000012 #Funktionsaufruf
Start-Batch -JobID 1234000013 #Funktionsaufruf
Start-Batch -JobID 1234000014 #Funktionsaufruf
}
function Start-Hauptskript2()
{
Start-Batch -JobID 1234000024 #Funktionsaufruf
Start-Batch -JobID 1234000025 #Funktionsaufruf
}
function Start-Batch($JobID)
{
$ErrorCode = .\StartBatch.ps1 -JobID $JobID
If ($ErrorCode -ne 0)
{
$ErrorCode = "F$ErrorCode"
New-Log -TextID $ErrorCode -LogArt 3
}
}
Wenn er nun Hauptskrip1 ausführt und dort den ersten Start-Batch ausgeführt hat und dieser auf einen Fehler getreten ist, sodass $ErrorCode ungleich 0. Dann soll er Hauptskript1 beenden und mit Hautpskript2 weitermachen.
Frag ist, wie ich das am besten anstelle. Mit Return beende ich eine Funktion, allerdings müsste ich dann jeden Start-Batch mit einer IF Anweisung umschliesen und schauen was die Funktion Start-Batch zurückgiebt und dann je nachdem return oder weitermachen.
Am besten wäre es, wenn man irgendwie in der Function Start-Batch so Wert gleich mitgeben kann, der die aufrufende Funktion beendet.
Oder gibt es da sogar einen eleganteren Weg dies zu lösen?
Please also mark the comments that contributed to the solution of the article
Content-Key: 474136
Url: https://administrator.de/contentid/474136
Printed on: April 19, 2024 at 02:04 o'clock
4 Comments
Latest comment
Für sowas gibt's try catch und throw
function Start-Hauptskript1()
{
Try{
Start-Batch -JobID 1234000012
Start-Batch -JobID 1234000013
Start-Batch -JobID 1234000014
}catch{
write-error -Message $_
Write-host "Es gab einen Fehler, mache deswegen weiter mit Hauptscript2"
Start-Hauptskript2
}
}
function Start-Hauptskript2()
{
Try{
Start-Batch -JobID 1234000024
Start-Batch -JobID 1234000025
}Catch{
write-error -Message $_
}
}
function Start-Batch($JobID)
{
$ErrorCode = .\StartBatch.ps1 -JobID $JobID
If ($ErrorCode -ne 0)
{
$ErrorCode = "F$ErrorCode"
New-Log -TextID $ErrorCode -LogArt 3
Throw "Error $errorcode in Job $jobid"
}
}
Nicht rumraten sondern informieren dann verstehst du auch warum das so ist und eine Function einen eigenen Scope hat.
https://ss64.com/ps/syntax-scopes.html
Ein Grund warum man Funktionen primär so nutzt das entsprechende Werte mit Return zurückgeben werden ohne dauern die Scopes ändern zu müssen.
https://ss64.com/ps/syntax-scopes.html
Ein Grund warum man Funktionen primär so nutzt das entsprechende Werte mit Return zurückgeben werden ohne dauern die Scopes ändern zu müssen.