【问题标题】:PowerShell script run using Windows Task Scheduler is not running a SQL Server SSIS DTEXEC.EXE job使用 Windows 任务计划程序运行的 PowerShell 脚本未运行 SQL Server SSIS DTEXEC.EXE 作业
【发布时间】:2016-03-28 02:39:19
【问题描述】:

希望这个问题足够独特,不会重复。我有一个 PowerShell 脚本,它做两件事。

  1. 将记录插入到 SQL Server 表中
  2. 将文本写入文本文件

为了这篇文章的目的,我已经简化了脚本。在我的计算机上,该脚本位于 C:\Temp\ssis.ps1。以下是脚本的内容。

DTEXEC.EXE /F "C:\Temp\ssisjob.dtsx"    
$date = Get-Date
Write-Output "This PowerShell script file was last run on $date" >> C:\Temp\test.txt  

当我手动运行这个 PowerShell 脚本时,记录被插入到 SQL Server 表中,并且一行文本被写入到 test.txt 文件中。如果我计划使用 Windows 任务计划程序运行此脚本,则会将新的文本行写入文本文件,但不会将记录插入 SQL Server 表中。这告诉我 Windows 任务计划程序能够运行 PowerShell 脚本。但是,由于某些未知原因,Windows 任务计划程序似乎不想运行脚本的 SSIS 作业 (DTEXEC.EXE) 部分。事件查看器确认 SSIS 作业存在问题。我正在运行 Microsoft SQL Server 2014,开发者版本。

在我的任务中,在“操作”选项卡上,“添加参数”字段具有以下引用:C:\Temp\ssis.ps1。任务计划程序配置为以最高权限运行。

我已在 PowerShell 中尝试了以下所有执行策略。无论我选择何种执行政策,我的体验都不会改变。

  • 绕过
  • 无限制
  • 远程签名

任务计划程序中的历史选项卡有信息 事件,但没有错误 事件。

我没有查看 SQL Server 日志的权限(这是生产服务器)。

我已经调试这个问题几个星期了,我已经阅读了很多关于 Stack Overflow 的帖子,但我似乎仍然找不到答案,所以希望我在在这里发新帖子之前已经完成了我的尽职调查。我可以添加一些额外的意见,但我不希望我在这里的帖子太长。如果有人有任何提示、技巧或见解可以引导我走上正确的道路,我们将不胜感激。

【问题讨论】:

  • 第一个危险信号是包在您的个人文件夹中。也许调度程序帐户无法访问它。你能找到任何 Windows 调度程序日志吗? (即在 Windows 事件日志中)。尝试将包移动到更容易访问的位置,如 C:\temp 并查看它是否有效,但还要找到描述脚本执行的日志。什么版本的 SSIS? SQL Server 有自己的调度和日志基础架构
  • 非常感谢尼克的这些提示和想法。我会尝试你在这里分享的想法。一旦我尝试了这些想法,我会再次回复。我真的很感激这里的想法! :)
  • 今天我将我的 PowerShell 脚本移动到 C:\Temp,我遇到了同样的问题。我能够在事件查看器中找到确认 SSIS 作业失败的事件。我正在运行 SQL Server 2014 Developer 版本。我编辑了我的帖子以反映这些新发现。感谢您提出任何其他想法! :)
  • 那么事件在详细信息选项卡上说明了什么?请复制/粘贴。包裹保护等级是多少?您使用什么安全性连接到数据库(SQL 或 Windows 身份验证)。其他可以尝试的方法是将计划的作业设置为自己运行 - 按“更改用户或组”按钮并输入您的凭据。
  • 再次感谢尼克的想法!我已经修改了我的帖子以包含事件查看器的详细信息选项卡。我没有在详细信息选项卡中看到有助于在此处查明解决方案的信息。创建 SSIS 作业时,我选择的包保护级别是“使用用户密钥加密敏感数据”。我还尝试了“不保存敏感数据”和“使用密码加密敏感数据”。这两个都在 PowerShell 中显示身份验证错误。连接到 SQL 时,我使用的是 SQL 身份验证。我确实验证了我的计划任务的常规选项卡配置为使用我的用户帐户运行。

标签: sql-server windows powershell ssis scheduled-tasks


【解决方案1】:

这是我想出的解决方案。我没有将文件导出到 Excel,而是导出到了一个平面文件(txt 文件)。另外,使用 Nick McDermaids 的优秀推荐,我没有在 Task Scheduler 中使用 PowerShell,而是在 Task Scheduler 中启动了 dtexec.exe 文件。

任务调度器操作选项卡

  • 将操作保持为启动程序

  • 在程序/脚本中,键入 dtexec.exe

  • 在添加参数中,键入 /f "C:\path\to\example.dtsx

  • 将“开始”框留空

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 2013-08-22
    • 2020-08-07
    • 2019-05-08
    • 2017-08-01
    • 2020-07-13
    • 2017-06-21
    • 2015-07-22
    相关资源
    最近更新 更多