Unser DBA-Team überprüft die Sicherungen nicht anhand der folgenden Informationen TSQL
(was einfach nach der Sicherung durchgeführt werden kann und fast keine Zeit in Anspruch nimmt, daher verstehe ich nicht, warum nicht):
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\LOCATION'
Sie hatten in der Vergangenheit Probleme, und obwohl wir glauben, dass sie daraus lernen würden, haben sie es nicht getan. Ich habe dazu ein Powershell-Skript erstellt, da wir über 100 Server haben und ich dieses Skript nur für alle Sicherungen ausführen möchte, um sicherzustellen, dass sie gültig sind. Das folgende Skript wird korrekt ausgeführt (da es keine Fehler verursacht oder auslöst). Ich bin gespannt, ob es eine Möglichkeit gibt, die gedruckte Nachricht in Powershell zurückzugewinnen, die wir normalerweise in SSMS erhalten würden, wo es heißt, dass das in Datei 1 festgelegte Backup lautet gültig als Verifikation.
$SqlCon = New-Object System.Data.SqlClient.SqlConnection
$SqlCon.ConnectionString = "SERVER=SERV\INST;Integrated Security=true;DATABASE=master"
$baks = Get-ChildItem "D:\Backups\" -Filter *.BAK
foreach ($bak in $baks)
{
$SqlCon.Open()
$cd = New-Object System.Data.SqlClient.SqlCommand
$cd.Connection = $SqlCon
$cd.CommandText = "RESTORE VERIFYONLY FROM DISK = @f"
$cd.Parameters.Add("@f", $bak.FullName)
$cd.ExecuteNonQuery()
$SqlCon.Close()
}
quelle
invoke-sqlcmd -verbose
?Invoke-SqlCmd ... -Verbose
Dies ist auch hilfreich, wenn Sie die Ausgabe zur späteren Verwendung umleiten möchten, anstatt sie sofort auf den Host zu drucken.Antworten:
Erfassen der InfoMessage-Ausgabe (PRINT, RAISERROR) von SQL Server mit PowerShell
Der Trick besteht, wie Jonathan betont, darin, dass an den Verbindungsmanager ein Listener angeschlossen sein muss, der auf die Druck- oder Fehleraktionen wartet.
Ich habe auch die Ausgabe des Hinzufügens eines Parameters weitergeleitet,
Out-Null
da dies Rauschen war, das ich nicht brauchte.quelle