2

我有一个复杂的 Powershell 脚本,它作为 SQL 2005 服务器代理作业的一部分运行。该脚本运行良好,但它使用“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
**********************

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

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

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

作为 2005 SQL Server 代理作业的一部分执行时,有什么方法可以让 PowerShell 脚本正常工作?

4

3 回答 3

1

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

cmd /c powershell.exe -file "C:\temp\backup script.ps1" > backup.log
于 2010-03-05T00:41:52.210 回答
1

sqlps.exe 不实现某些方法,包括支持 write-host 的方法。这可以解释为什么在从 SQL 代理 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

于 2010-03-05T01:20:00.403 回答
0

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

于 2010-03-30T00:08:48.440 回答