Powershell if() Abfrage bei SQL Stored Procedure execute Fehler?
Hallo zusammen,
ich bräuchte Eure Hilfe,
Das unten stehende Script ist nur ein Ausschnitt und Funktioniert!
Allerdings möchte ich jetzt eine IF Abfrage durchführen, wenn der SQL Teil mit Fehler abbricht, soll if greifen.
Dies geschieht aber leider nicht.
Als Meldung bekomme ich eine 1 zurück und rechts in der Console steht Column1 und darunter 1, dann läuft das Script durch.
Kann jemand weiterhelfen?
Vielen Dank! VG
#SQL verbinden und Stored Procedure auslösen
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=blbnbgIamDBm01;Database=RoPE;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "RoPE.spDeleteOldCalculations"
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandTimeout = 0
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure
$param1=$SqlCmd.Parameters.Add("@daysOld" , [System.Data.SqlDbType]::INT)
$param1.Value = $days
$param2=$SqlCmd.Parameters.Add("@maxCalcs" , [System.Data.SqlDbType]::INT)
$param2.Value = 0
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables
if ( )
{
Write-Output "$(Get-TimeStamp) Die Aufgabe wurde abgebrochen und die Dienste nun wieder gestartet! $dc" | Out-file C:\temp\dclog.txt -append
#Löscht EngineConfiguration.config bei Abbruch
Remove-Item c:\temp\EngineConfiguration.config
break
}
ich bräuchte Eure Hilfe,
Das unten stehende Script ist nur ein Ausschnitt und Funktioniert!
Allerdings möchte ich jetzt eine IF Abfrage durchführen, wenn der SQL Teil mit Fehler abbricht, soll if greifen.
Dies geschieht aber leider nicht.
Als Meldung bekomme ich eine 1 zurück und rechts in der Console steht Column1 und darunter 1, dann läuft das Script durch.
Kann jemand weiterhelfen?
Vielen Dank! VG
#SQL verbinden und Stored Procedure auslösen
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=blbnbgIamDBm01;Database=RoPE;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "RoPE.spDeleteOldCalculations"
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandTimeout = 0
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure
$param1=$SqlCmd.Parameters.Add("@daysOld" , [System.Data.SqlDbType]::INT)
$param1.Value = $days
$param2=$SqlCmd.Parameters.Add("@maxCalcs" , [System.Data.SqlDbType]::INT)
$param2.Value = 0
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables
if ( )
{
Write-Output "$(Get-TimeStamp) Die Aufgabe wurde abgebrochen und die Dienste nun wieder gestartet! $dc" | Out-file C:\temp\dclog.txt -append
#Löscht EngineConfiguration.config bei Abbruch
Remove-Item c:\temp\EngineConfiguration.config
break
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 365238
Url: https://administrator.de/contentid/365238
Ausgedruckt am: 25.11.2024 um 02:11 Uhr
13 Kommentare
Neuester Kommentar
Stichwort
Try...Catch
Try...Catch
Naja wenn man sich den Link zumindest mal durchgelesen hätte, würdest du jetzt mal so vorgehen
War das jetzt wirklich so schwer?
Das ist übrigens ein Konstukt das es in fast jeder Programmiersprache gibt sei es c#/vb.net/java/ etc. pp.
Also mit etwas Verstand schafft man das auch selbst und ein Thread wäre überflüssig.
Hier noch was Lektüre zm Errorhandling. Also wenn das nicht reicht dann helfe dir Gott ....
https://blogs.msdn.microsoft.com/kebab/2013/06/09/an-introduction-to-err ...
try{
# hier kommt alles an Befehlen rein was Fehler/Exceptions auslesen könnte
}catch{
# hier reagierst du auf fehler.
In dem Objekt $_.Exception.Message steht die Fehlermeldung
}
Das ist übrigens ein Konstukt das es in fast jeder Programmiersprache gibt sei es c#/vb.net/java/ etc. pp.
Also mit etwas Verstand schafft man das auch selbst und ein Thread wäre überflüssig.
Hier noch was Lektüre zm Errorhandling. Also wenn das nicht reicht dann helfe dir Gott ....
https://blogs.msdn.microsoft.com/kebab/2013/06/09/an-introduction-to-err ...
Was du nicht verstehst sagst du leider nicht. Es steht ja eigentlich ganz klar oben in den Kommentaren wie du vorgehen musst, oder suchst du jetzt nur jemanden der es dir einfach fertig schreibt und du nur den Kopf auschalten und kopieren musst, dann bist du hier IMHO falsch. das bißchen Copy n' Paste an die Stellen die oben markiert sind schafft eigentlich jeder.
Na denn, machs gut.
Gruß snap
Na denn, machs gut.
Gruß snap
Richtig.
Try wird immer ausgeführt, catch wird nur ausgeführt wenn ein Fehler in einem der Befehle im try Block auftritt und finally wird immer ausgeführt egal ob es eine Exception gab oder nicht !! Der Finally Abschnitt wird meistens dazu genutzt offene Handles zum Abschluss zu schließen/freizugeben.
Du bist auch nicht gezwungen alles in den try block zu packen, du kannst dort auch nur die zu überprüfenden Teile einsetzen während andere außerhalb/davor/danach liegen um so speziell nur bestimmte Befejle für die Fehlerbehandlung auszuwählen.
Alles was zur Fehlerbehandlung ist, gehört in den Catch Block! Nicht in den Finally!
Du hast also einen groben Denkfehler vom Konstrukt!
Das steht aber auch alles in der Doku zum Konstrukt, wenn man es mal lesen würde.
Du bist auch nicht gezwungen alles in den try block zu packen, du kannst dort auch nur die zu überprüfenden Teile einsetzen während andere außerhalb/davor/danach liegen um so speziell nur bestimmte Befejle für die Fehlerbehandlung auszuwählen.
Alles was zur Fehlerbehandlung ist, gehört in den Catch Block! Nicht in den Finally!
Du hast also einen groben Denkfehler vom Konstrukt!
Das steht aber auch alles in der Doku zum Konstrukt, wenn man es mal lesen würde.
Hat ja auch niemand behauptet das du ihn zwingend einbinden musst du kannst ihn selbstverständlich weg lassen.
denn wenn kein Fehler ist soll er ja mit dem Script weiter fortsetzen.
Das tut das Skript auch wenn es ein Fehler gibt und du Try catch benutzt. Ob das Skript bei einem Fehler im catch beendet wird wird musst du selbst mit einem "exit" skripten. Es behandelt nur Fehler, aber es stopt nicht die weitere Ausführung der nach den Blocks folgenden Befehle.