我有一个SSIS执行过程任务,该任务运行一个Powershell脚本,该脚本正试图在我正在构建的自定义日志记录框架中利用。我在网上进行的所有研究都表明,如果我在变量中捕获StandardErrorVariable和StandardOutputVariable,则应该能够使用它们在正在构建的自定义日志记录框架中得出有意义的错误消息。 Powershell脚本从API端点提取数据,并将其移动到SQL Server中的表中。在Powershell脚本中,我将insert语句中的名称之一更改为不存在的列,以测试这些属性中的错误消息的外观。 StandardOutputVariable返回了我期望的结果,但StandardErrorVariable为空。谁能帮我找出为什么StandardErrorVariable为空白?
答案 0 :(得分:0)
可能是因为涉及了太多的外壳。另外,SSIS本身就是越野车。 作为一种可能的解决方法,您可以尝试将错误流重定向到stdout,它可能会出现在StandardOutputVariable中。 从powershell内部添加*>&1,尽管您可能需要先将脚本包装为脚本块:
&{
#some script
Write-Output "Hello"
Write-Error "Error occured"
} *>&1 # * will move all streams to stdout
如果从批处理/ cmd中调用脚本,请在末尾添加2>&1(*在cmd中不起作用,2是错误流)
> powershell .\yourscript.ps1 2>&1
此外,您可以通过使用try / catch包装脚本来执行类似的操作,并使用Write-Host打印catch中的错误。如果您确实确实需要单独保留错误并且没有其他解决方案,则可以将其重定向到文件,然后从那里读取(通过添加2> error.log)