2015-06-04 5 views
0

Извините, я новичок в Powershell, поэтому я, очевидно, пропустил что-то довольно фундаментальное, но я не могу понять это.Почему мой выходной файл powershell не заполнен?

У меня есть сценарий powershell, вызывающий SQL-скрипт. Я могу запустить скрипт, но я также хотел бы сохранить вывод в файле журнала.

Это мой сценарий PowerShell

Add-PSSnapin SqlServerCmdletSnapin100 
Add-PSSnapin SqlServerProviderSnapin100 

Invoke-Sqlcmd -inputfile "testscript.sql" -serverinstance '.\sql2008' | Out-file -filepath "testlog.txt" 

И это мой testscript.sql

PRINT 'HELLO WORLD' 

На данный момент, он создает файл testlog.txt, но он пустой.

Что я делаю неправильно?

+0

Если удалить 'Out-file' команду и запустить его, появляется ли требуемый текст в консоли? –

+0

@ RyanBemrose: нет. – Diskdrive

+0

@RyanBemrose: если я делаю это «Invoke-Sqlcmd -inputfile» testscript.sql «-serverinstance». \ Sql2008 «-verbose», я могу заставить его отображаться на экране, но не уверен, как его сохранить. – Diskdrive

ответ

3

Кажется, данные, которые вы хотите, находятся в подробном потоке данных. В PowerShell 3.0 и выше вы можете перенаправить подробный поток (4) в поток stdout (1), прежде чем его можно будет отправить в Out-File.

Invoke-Sqlcmd -inputfile "testscript.sql" -serverinstance '.\sql2008' -verbose 4>&1 | Out-file -filepath "testlog.txt" 

См Get-Help about_redirection для объяснения различных потоков.

См. Также Powershell: Out-File для обсуждения ошибки перенаправления и подробных потоков в Out-File.

К сожалению, PowerShell 2.0 поддерживает перенаправление потока 0,1,2. Вы можете использовать объект [System.Management.Automation.PowerShell] для доступа к другим потокам. Смотрите принятый ответ на Powershell Invoke-Sqlcmd capture verbose output

+0

Да, я пробовал это раньше , но все, что я получаю при запуске, это ошибка «Амперсанд не разрешен. Оператор & зарезервирован для использования в будущем, используйте« & »для передачи амперсанда в виде строки». Есть идеи, что это? – Diskdrive

+0

Странно, если я заменил 4> & 1 на 2> & 1, тогда он работает (хотя он все еще пуст). Похоже, что поток данных 4 отсутствует или что-то еще? – Diskdrive

+0

Какую версию PowerShell вы используете? Потоки> = 3 были добавлены в Powershell 3.0, который поставляется с Windows 8 и Windows Server 2012. –

1

Вы можете сохранить Verbose (и все другие консоли вывода) в файл, не засоряя свой выходной поток с Start-Transcript

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