通过SQL Server代理作业调用Powershell脚本 - start-transcript不会输出

时间:2012-04-03 12:12:19

标签: sql-server powershell

已经有一个问题(here)。但是我希望因为我使用的是PowerShell 2和SQL Server 2008,如果我再问一遍,我可能会得到不同的答案。

基本上,我有一个SQL Server代理作业,它运行cmd脚本,如下所示:

powershell "&D:\SQL\Job\JobDir\Upload.ps1 (various arguments including log file name)"

当它运行start-transcript时,会创建该文件,但除了标题之外的任何内容都不会写入该文件。但是,当我在命令行上运行时,一切都记录正确。

我已经有很多逻辑来管理powershell脚本中的旧日志文件,并且不想只使用SQL Server代理提供的默认日志记录。

要写出信息,我使用带有详细标志的invoke-sqlcmd,以及写消息和写错误。

感谢您的任何指示! 西尔维亚

4 个答案:

答案 0 :(得分:0)

start-transcript创建一个文本文件

运行代理作业的权限可能无权创建powershell想要创建它的文本文件

答案 1 :(得分:0)

权限对我来说不是问题。我认为有很好的方法来处理来自powershell的输出,具有所有不同的输出流(错误,冗长等),但是我只是使用了SQL Server代理提供的默认日志记录,而不是进入这些细节。为每个工作步骤。它工作正常。我仍然使用我编写的逻辑来管理和存档脚本中的日志文件,即使日志文件本身是由SQL Server生成的,我也可以这样做。

答案 2 :(得分:0)

我认为当控制台未启动时(例如在服务中),start-transcript不起作用:不会生成输出,这可以解释文件为空的原因。

请参阅start-transcript causes script to fail in a background job

答案 3 :(得分:0)

如上所述,Start-Transcript将在指定的位置创建一个文件(只要代理有权在那里创建文件)。但是,没有任何内容会流式传输到脚本文件,因为从技术上讲,没有控制台窗口正在运行。

通过SQL代理(2012年之前)运行powershell文件时 C:\ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe C:\ myscript.ps1“SOMEPARAMETER”

我只是在SQL步骤高级属性中使用SQL Agent的本机输出文件选项 C:\ LOGGING \ myfile _ $(ESCAPE_SQUOTE(STRTDT))_ $(ESCAPE_SQUOTE(STRTTM))。txt并跳过powershell的成绩单能力。

必要时包括Write-Host。 Write-Host“r n”将适当地创建新行。 还包括-Verbose允许的内容和try / catch错误输出,文件将适当记录。