Tim DBA kami tidak memverifikasi cadangan menggunakan di bawah ini TSQL
(yang dapat dengan mudah dilakukan pasca-cadangan dan hampir tidak memerlukan waktu, jadi saya tidak mengerti mengapa tidak):
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\LOCATION'
Mereka memiliki masalah di masa lalu, jadi meskipun kami pikir mereka akan belajar dari itu, mereka belum. Saya membuat skrip Powershell untuk melakukan ini karena kami memiliki sekitar 100 server dan saya hanya ingin menjalankan skrip ini terhadap semua cadangan hanya untuk memastikan mereka valid. Script di bawah ini berjalan dengan benar (dalam hal itu tidak memecahkan atau melempar kesalahan), saya ingin tahu apakah ada cara untuk mendapatkan pesan yang dicetak kembali di Powershell yang biasanya kita dapatkan di SSMS di mana ia menyatakan Set cadangan pada file 1 adalah valid sebagai verifikasi.
$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()
}
sumber
invoke-sqlcmd -verbose
?Invoke-SqlCmd ... -Verbose
juga bagus jika Anda ingin mengarahkan output untuk digunakan nanti daripada hanya mencetaknya ke host segera.Jawaban:
Menangkap Output InfoMessage (PRINT, RAISERROR) dari SQL Server menggunakan PowerShell
Kuncinya, seperti yang ditunjukkan Jonathan, adalah Anda harus memiliki pendengar yang terhubung dengan manajer koneksi mendengarkan tindakan cetak atau kesalahan.
Saya juga menyalurkan output untuk menambahkan parameter
Out-Null
karena itu adalah noise yang tidak saya butuhkan.sumber