Ваш метод должен работать, если вы просто перенаправляете нужные выходные потоки в ваш файл.>>
по умолчанию только перенаправляет поток успеха.Поток ошибок 2
(2>>
).Все потоки *
(*>>
).Если вы хотите перенаправить только потоки ошибок и успехов, вы можете отправить поток ошибок в поток успеха, а затем отправить поток успеха в ваш файл через 2>&1 >> Production.log.txt
.$LastExitCode
все равно предоставит 1
, если запрос выдаст ошибку.
Пример: перенаправление всех потоков
ECHO "Running `"02 test2.sql`"" | tee -a Production.log.txt
sqlcmd -r -b /S serverName /d dbName -i "02 test2.sql" *>> Production.log.txt
if ($LASTEXITCODE -ne 0) {
Write-Error "Error occured while running `"02 test2.sql`". Terminating script."
TerminateScript
}
Пример: ошибка перенаправленияи потоки успеха
sqlcmd -r -b /S serverName /d dbName -i "02 test2.sql" 2>&1 >> Production.log.txt
Я знаю, что это НЕ именно то, что вы хотите, но это альтернатива.Вы можете использовать Start-Process
для вызова sqlcmd
и перенаправления потоков ошибок и успехов.Имейте в виду, что выходные файлы перезаписываются при каждом запуске.Файл error.txt
будет пустым, если не было ошибок.
Start-Process sqlcmd -ArgumentList "-r -b /S poc-vtxrtndb2 /d test -i `"02 test2.sql`"" -NoNewWindow -RedirectStandardError error.txt -RedirectStandardoutput log.txt
if (Get-Content error.txt) {
"There was an error in the script"
}
См. About_Redirection для получения дополнительной информации о перенаправлении вывода PowerShell.