Powershell'de SSMS'den Basılı Mesaj Almak


12

DBA ekibimiz aşağıdakileri kullanarak yedeklemeleri doğrulamaz TSQL(bu , yedeklemeden sonra kolayca yapılabilir ve neredeyse hiç zaman almaz, bu yüzden neden olmasın):

RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\LOCATION'

Geçmişte sorunları vardı, bu yüzden ondan öğreneceklerini düşünüyor olsak da bilmiyorlardı. Bunu yapmak için bir Powershell betiği oluşturdum çünkü yaklaşık 100+ sunucumuz var ve bu betiği sadece geçerli olduklarından emin olmak için tüm yedeklemelere karşı çalıştırmak istiyorum. Komut altında doğru çalışır (o kırmak veya hataları atmak etmediğini) o devletler normalde SSMS alacağı Powershell basılmış mesajı geri almak için bir yol varsa, ben merak ediyorum dosya 1'dir üzerinde yedekleme kümesi doğrulama olarak geçerli .

$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()
}

4
invoke-sqlcmd -verbose?
Aaron Bertrand

Invoke-SqlCmd ... -Verboseçıktıyı hemen ana bilgisayara yazdırmak yerine daha sonra kullanmak üzere yeniden yönlendirmek istiyorsanız da iyi olur .
Peter Vandivier

Yanıtlar:


19

PowerShell kullanarak SQL Server'dan InfoMessage Çıktısını (PRINT, RAISERROR) yakalama

Püf noktası, Jonathan'ın belirttiği gibi, bağlantı yöneticisine yazdırma veya hata eylemlerini dinleyen bir dinleyiciye sahip olmanız gerektiğidir.

$cd.Parameters.Add("@f", $bak.FullName) | Out-Null
$handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] {param($sender, $event) Write-Host $event.Message }
$SqlCon.add_InfoMessage($handler)
$SqlCon.FireInfoMessageEventOnUserErrors = $true  

Ben de Out-Nullihtiyacım yoktu gürültü olarak bir parametre ekleme çıktı boru .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.