У Powershell Отримання друкованого повідомлення з SSMS


12

Наша команда DBA не перевіряє резервні копії, використовуючи наведене нижче TSQL(що легко зробити після резервного копіювання і не потребує часу, тому я не розумію, чому б ні):

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

У них були проблеми в минулому, тому, хоча ми могли б подумати, що вони навчиться на цьому, вони не стали. Я створив сценарій Powershell для цього, оскільки у нас є близько 100+ серверів, і я просто хочу запустити цей скрипт проти всіх резервних копій, щоб переконатися, що вони дійсні. Наведений нижче сценарій працює належним чином (оскільки він не ламає і не видаляє помилок), мені цікаво, якщо є спосіб повернути друковане повідомлення в Powershell, яке ми зазвичай отримуємо в SSMS, де зазначено, що резервна копія, встановлена ​​у файлі 1, - це дійсний як перевірка.

$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?
Аарон Бертран

Invoke-SqlCmd ... -Verboseтакож добре, якщо ви хочете перенаправити висновок для подальшого використання, а не просто негайно надрукувати його на хості.
Пітер Вандів'є

Відповіді:


19

Захоплення вихідних даних InfoMessage (PRINT, RAISERROR) з SQL Server за допомогою PowerShell

Хітрість Джонатана, як зазначає Джонатан, полягає в тому, що вам потрібно приєднати слухача до менеджера з'єднань, який слухає дії друку чи помилки.

$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  

Я також проклав висновок додавання параметра, Out-Nullоскільки це був шум, який мені не потрібен.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.