Транскрипт Powershell пуст при запуске скрипта из задания агента SQL в SQL Server 2005 - PullRequest
2 голосов
/ 05 марта 2010

У меня есть сложный скрипт Powershell, который запускается как часть задания агента SQL 2005 Server. Сценарий работает нормально, но он использует команду «Start-Transcript $ strLogfile -Append» для записи всех своих действий в файл расшифровки. Проблема в том, что стенограмма всегда пуста. Он добавляет верхний и нижний колонтитулы, чтобы указать, что стенограмма запускается и останавливается, но фактически ничего не регистрирует. Пример:

**********************
Windows PowerShell Transcript Start
Start time: 20100304173001
Username  : xxxxxxxxxxxx\SYSTEM 
Machine   : xxxxx-xxx (Microsoft Windows NT 5.2.3790 Service Pack 2) 
**********************
**********************
Windows PowerShell Transcript End
End time: 20100304173118
**********************

Когда я запускаю скрипт из командной строки или запускаю -> запускаю, все работает просто отлично. Вот команда, используемая для запуска сценария (та же команда, что и на шаге CmdExec операционной системы задания агента SQL)

powershell.exe -File "c:\temp\Backup\backup script.ps1"

Сначала я подумал, что это как-то связано со сценарием, работающим под системной учетной записью (учетная запись агента SQL по умолчанию), но даже когда я попытался изменить агент SQL для запуска под своей личной учетной записью, он все равно создал пустую расшифровку.

Можно ли как-то заставить транскрипты PowerShell работать при их выполнении в рамках задания агента SQL Server 2005?

Ответы [ 3 ]

1 голос
/ 05 марта 2010

sqlps.exe не реализует определенные методы, включая метод, который поддерживает запись-хост. Это может объяснить, почему вы не видите вывод с использованием Start-Transcript при запуске sqlps.exe из шага заданий Powershell SQL Agent. См. http://blogs.msdn.com/mwories/archive/2009/09/30/the-use-of-write-host-and-sql-server-agent-powershell-job-steps.aspx для получения дополнительной информации.

1 голос
/ 05 марта 2010

Если ваш скрипт использует собственные команды (консоли), Start-Transript не регистрирует ничего из этого вывода. Этот вопрос был зарегистрирован в Connect , вы можете проголосовать за него. Один из способов перехвата ввода - использовать cmd.exe:

cmd /c powershell.exe -file "C:\temp\backup script.ps1" > backup.log
0 голосов
/ 30 марта 2010

Я до сих пор не уверен, почему стенограмма Powershell пуста, но мы нашли обходной путь. На шаге CmdExec Задания SQL есть дополнительная опция для захвата вывода в файл, которая в сочетании с опцией «Добавить вывод в существующий файл» и использованием расширения Logfile.rtf примерно такая же, как и в стенограмме Powershell. Таким образом, все, что будет напечатано на хосте из скрипта Powershell (включая собственные исполняемые файлы консоли, переданные по каналу «| out-host»), будет записано в файл журнала.

...