2010-03-04 106 views
2

我有一个复杂的Powershell脚本,它作为SQL 2005 Server代理作业的一部分运行。该脚本工作正常,但它使用“Start-Transcript $ strLogfile -Append”命令将其所有操作记录到脚本文件中。问题是成绩单总是空的。它添加了页眉和页脚以指示转录本正在启动和停止,但它实际上不记录任何内容。例如:2005年从SQL代理作业运行脚本时Powershell脚本为空SQL Server

********************** 
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 Agent帐户),但即使当我尝试将SQL代理更改为以我自己的个人帐户运行时,它仍然创建了空白的副本。

有什么办法让PowerShell成绩单在作为2005 SQL Server代理作业的一部分执行时能够正常工作吗?

回答

0

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

1

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

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

事情是,从cmd.exe运行或从开始 - >运行时,脚本工作正常。它使用Powershell 2.0并将任何可执行文件的输出传输到外部主机。 – 2010-03-05 19:01:00

1

sqlps.exe没有实现某些方法,包括支持写主机的方法。这可以解释为什么当从SQL Agent Powershell jobstep运行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

+0

很高兴知道,但sqlps.exe实际上是SQL 2008的一部分。在这里,我使用SQL 2005和调用powershell.exe作为SQL代理作业中CmdExec步骤的一部分。我的猜测是,它与未在基于控制台的主机中运行的代理作业有关。 – 2010-03-05 19:05:40