0

Я бегу следующий SQLCMD через силовой оболочкине Sqlcmd возвращения ошибки

$dump = sqlcmd -S $server -Q $sqlCommand -t $queryTimeout -b -h -1 -W 

Я пытаюсь от записи вывода на экран

$message = "Error while executing sql {0}, Error details {1}" -f "$sqlCommand","$dump" 
Write-Warning $message 

но $dump пуст

+1

Ожидаете ли вы, что $ dump содержит ошибку? $ dump будет содержать только данные, отправляемые в выходной поток. Если из потока ошибок вам нужно перенаправить этот '$ dump = sqlcmd -S $ server -Q $ sqlCommand -t $ queryTimeout -b -h -1 -W 2> & 1' ... возможно, – Matt

+0

SQLCMD - это странное существо , Я бы подтвердил, выполнив запрос в SQL и проверив, что вы действительно получаете результат, а затем беспорядок с коммутаторами. Я обычно запускаю полные скрипты, поэтому я использую '-i' и даю имя файла, но я мог бы заставить его работать с' & (SQLCMD) -s localhost -x -i $ file'. Попробуйте удалить все свои коммутаторы, и если вы получите результат, добавьте их обратно. –

+0

Я ожидаю, что дамп будет содержать вывод файла sql, как если бы я запустил его в студии управления SQL –

ответ

1

Я не знаком с sqlcmd.exe, но из описания ваших ожиданий я думаю, что sqlcmd отправляет информацию вниз по потоку ошибок. Это, казалось бы, странная, но обычная практика и, следовательно, появление.

Проблема заключается в том, что переменная $dump будет собирать информацию только в выходной поток. То, что вы можете сделать, - перенаправить поток ошибок в выходной поток с помощью перенаправителя. Для получения дополнительной информации вы можете посмотреть на about_redirection

Таким образом, используя следующий будут выполнить следующее:

$dump = sqlcmd -S $server -Q $sqlCommand -t $queryTimeout -b -h -1 -W 2>&1 

Связанный документ описывает 2>&1, как

Посылает ошибки (2) и успех выход (1) к выходному потоку успеха.

В настоящее время $dump должно содержать то, что вы ищете. Будьте осторожны, хотя он может содержать больше информации, чем вы ожидаете.

Смежные вопросы