从2005 SQL Server中的SQL Agent Job运行脚本时,Powershell Transcript为空

时间:2010-03-04 23:54:02

标签: sql-server-2005 powershell sql-server-agent

我有一个复杂的Powershell脚本,它作为SQL 2005 Server Agent Job的一部分运行。该脚本工作正常,但它使用“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
**********************

当我从命令提示符执行脚本或启动时 - >运行一切正常。以下是用于运行脚本的命令(在SQL代理作业的操作系统CmdExec步骤中使用的相同命令)

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

我首先认为它必须与在系统帐户下运行的脚本(默认的SQL代理帐户)有关,但即使我尝试将SQL代理更改为在我自己的个人帐户下运行,它仍然会创建一个空白的脚本。

有没有办法让PowerShell Transcripts在2005年SQL Server代理作业中执行时能够正常工作?

3 个答案:

答案 0 :(得分:1)

如果您的脚本使用本机命令(控制台exes),则Start-Transript不会记录任何输出。此问题已logged on Connect,您可以对其进行投票。捕获所有输入的一种方法是使用cmd.exe:

cmd /c powershell.exe -file "C:\temp\backup script.ps1" > backup.log

答案 1 :(得分:1)

sqlps.exe没有实现某些方法,包括支持write-host的方法。这可以解释为什么在从SQL Agent Powershell作业步骤运行sqlps.exe时,您没有看到使用Start-Transcript的输出。有关详细信息,请参阅http://blogs.msdn.com/mwories/archive/2009/09/30/the-use-of-write-host-and-sql-server-agent-powershell-job-steps.aspx

答案 2 :(得分:0)

我仍然不确定为什么Powershell Transcript是空的,但我们找到了解决方法。在SQL作业的CmdExec步骤下,有一个高级选项可以将输出捕获到文件中,该选项与“将输出附加到现有文件”选项相结合,并使用Logfile.rtf扩展名与Powershell转录本大致相同。这样,从Powershell脚本打印到主机的任何内容(包括管道传送到“| out-host”的本机控制台可执行文件)都将被捕获到日志文件中。