Powershell에서 SSMS에서 인쇄 된 메시지 검색


12

우리 DBA 팀은 아래를 사용하여 백업을 확인하지 않습니다 TSQL(백업 후 쉽게 수행 할 수 있으며 거의 ​​시간이 걸리지 않으므로 이유가 없습니다).

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

그들은 과거에 문제가 있었으므로 우리는 그들이 그것을 배울 것이라고 생각하더라도 그렇지 않았습니다. 우리는 약 100 개 이상의 서버를 가지고 있기 때문에 Powershell 스크립트를 만들었으며 모든 백업에 대해이 스크립트를 실행하여 서버가 유효한지 확인하려고합니다. 아래 스크립트는 올바르게 실행되며 (오류가 발생하지 않거나 오류가 발생하지 않습니다) 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?
Aaron Bertrand

Invoke-SqlCmd ... -Verbose출력 을 호스트에 즉시 인쇄하는 대신 나중에 사용하기 위해 출력리디렉션 하려는 경우에도 좋습니다 .
피터 Vandivier

답변:


19

PowerShell을 사용하여 SQL Server에서 InfoMessage 출력 (PRINT, RAISERROR) 캡처

Jonathan이 지적한 것처럼, 인쇄 또는 오류 작업을 수신 대기하는 연결 관리자에 리스너를 연결해야합니다.

$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필자가 필요하지 않은 노이즈로 매개 변수를 추가 한 결과를 파이프했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.