【问题标题】:why task scheduler status is success even if the powershell script is getting failed为什么即使powershell脚本失败,任务调度程序状态也是成功的
【发布时间】:2015-10-19 05:40:36
【问题描述】:

基本上我已经在windows任务调度器中安排了一个任务。

在任务中我安排了一个 powershell 脚本

在程序/脚本路径中我们给出了 powershell 路径,在参数路径中我们给出了

-command "& C:\Users\xxxx\Desktop\1.PS1"

我正在检查任务是否因 powershell 脚本失败而失败。

所以 powershell 脚本正在失败,但上次运行状态显示

"The operation completed successfully"

如何配置我的任务,以便在 powershell 脚本未成功运行时返回失败?

编辑

我有 3 个任务(所有 3 个都是具有参数的 powershell 脚本) 基本上我已经为任务 2 和任务 3 创建了一个自定义触发器

即如果task1成功则触发task 2,如果task 2成功则触发task3。

在测试上述场景时,即使任务 2 中使用的 powershell 脚本返回错误(在代码中故意完成错误以检查场景),最后运行状态表示操作成功完成并触发任务 3 任务

【问题讨论】:

  • 我还需要通过脚本传递许多参数。如果我在那里提到文件,我该如何实现?
  • 我已经检查了你的建议仍然面临同样的问题

标签: powershell scheduled-tasks powershell-3.0 windows-task-scheduler


【解决方案1】:

而不是当前的情况,为什么您没有 3 个计划任务。 第一个运行第一个脚本,如果脚本本身认为自己成功,则运行第二个计划任务本身? 例如,使用 Start-ScheduledTask (https://technet.microsoft.com/en-us/library/jj649818(v=wps.630).aspx)。

这样,您的每个脚本都可以检查自己是否存在问题,如果没有发现问题,则可以调用下一个任务。这还有一个额外的好处,就是让您可以完全控制要运行的计划任务以及运行时间。

【讨论】:

  • 这里的问题将是获取任务的执行状态,即使powershell脚本运行错误也会返回“操作成功完成”
  • 啊,不。我并不是说您应该检查计划任务的状态。而不是你应该检查你的第一个脚本是如何运行的,如果它运行良好,让它触发第二个计划任务,依此类推。大概您的 powershell 脚本可以仅从它产生的结果中检测到它是如何运行的?
  • 是的,可以完成,但不是通用的,假设我们有“n”个任务,那么我们需要检查 ppowershell 脚本的输出,基于此我们需要通过任务名称启动另一个任务完成后,我们需要按其“名称”开始另一个任务,这是不可行的如果我错过了什么请告诉我
  • 你是对的,你基本上需要将你的脚本链接在一起。 IE。任务 1 运行脚本 1。脚本 1 完成,因为它成功,所以启动任务 2。任务 2 启动脚本 2。脚本 2 完成,因为它成功启动任务 3...等等。
【解决方案2】:

根据 cmets in this thread 和我自己的测试,听起来不可能让计划任务因脚本失败而将自己记录为失败,因为任务的目的是启动程序,它成功了。

但是,可以向计划任务返回退出代码。退出代码将记录在事件历史记录(信息级别)中。如in this thread所述,返回码必须在定时任务调用脚本的参数中引用:

-ExecutionPolicy Bypass –NoProfile –Command "& {C:\ProgramData\ORGNAME\scripts\SetDNS.ps1; exit $LastExitCode}"

【讨论】:

    猜你喜欢
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2014-09-20
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    相关资源
    最近更新 更多