如何发送计划任务的输出?

在Unix系统上,计划任务服务将通过电子邮件发送计划任务产生的任何输出。 如果没有输出,则不发送电子邮件。 我如何在Windows Server 2003或2008上做同样的事情? 有没有办法调用batch file或可执行文件来运行我的任务,捕获输出,并只有在有输出的时候才发送邮件?

如果你提出一个PowerShell解决scheme,请注意,我只有PowerShell 1.0。

我使用autoIT这种东西。 它使用起来非常简单,并且内置了这个function。帮助文件中包含了完整的示例和片段,完全符合您的需求。 如果我对手头的任务有更多的细节,我会有一个更具体的答案。

你应该能够从这里find你需要的东西。

至less在Windows Server 2008上,您可以使用以下路由:

  1. 使用任务计划程序设置您的常规任务。 如果你需要捕获你的程序的输出,我假设它是一个命令行程序。 您可以像在Unix系统上一样将Windows命令行上的命令输出redirect到一个文件。 为此,我会写一个运行我的命令并捕获其输出的批处理:

    @ECHO OFF REM Run command mycmd.exe > outfile.txt REM Check that outfile exists IF NOT EXIST outfile.txt ( @echo File does not exist exit 2 ) REM Compare outfile to a known empty file TYPE nul > blank.txt FC outfile.txt blank.txt > nul REM Check result, and remove blank file. IF errorlevel 1 ( del blank.txt @echo File is not empty exit 0 ) ELSE ( del blank.txt @echo File is empty exit 1 ) 
  2. 计划任务将logging在“应用程序和服务事件日志”中的Microsoft> Windows>任务计划程序>操作下。

    然后,您可以创build在该日志中添加条目时引发的第二个任务。

    您必须相应地设置操作的触发器。 你需要做的是在201个事件(动作结束)上创build一个事件filter,其任务名称与运行上述脚本的任务名称匹配,结果代码为0.应该可以使用任务调度程序UI,或者您可以使用XPath筛选。

    然后将该任务的操作设置为“发送电子邮件”,并设置所需的任何参数。 将附件的名称设置为outfile.txt的path,就完成了。

  3. 您可以使用相同的技术来处理返回代码1和2,以在必要时警告空白或缺lessoutfile。

很简单,不是吗? :D让我每天都越来越爱Linux。

编辑如果您有一个从命令行运行的邮件程序,您可以简单地从运行该命令的脚本调用该程序,从而无需创build基于事件的任务。