在 Unix 系统上,计划任务服务将通过电子邮件发送计划任务产生的任何输出。如果没有产生输出,则不会发送电子邮件。如何在 Windows Server 2003 或 2008 上执行相同操作?有没有办法调用批处理文件或可执行文件来运行我的任务、捕获输出,并且仅在有输出时才通过电子邮件发送?
如果您提出 PowerShell 解决方案,请注意我只有 PowerShell 1.0。
答案1
我使用 autoIT 来处理这类事情。它非常易于使用,并且内置了此功能。帮助文件中充满了示例和代码片段,它们可以完全满足您的需求。如果我对手头的任务有更多详细信息,我就会给出更具体的答案。
您应该能够从这里找到您需要的内容。
答案2
至少在 Windows Server 2008 上,您可以使用以下路线:
使用任务计划程序设置常规任务。如果您需要捕获程序的输出,我假设它是一个命令行程序。您可以重定向命令输出在 Windows 命令行上将命令复制到文件,就像在 Unix 系统上一样。为此,我将编写一个批处理来运行我的命令并捕获其输出:
@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 )
计划任务记录在应用程序和服务事件日志中,位于 Microsoft > Windows > 任务计划程序 > 操作下。
然后,您可以创建第二个任务,当在该日志中添加条目时,该任务就会引发。
您必须相应地设置操作的触发器。您需要做的是在 201 事件(操作结束)上创建一个事件过滤器,其任务名称与运行上述脚本的任务名称匹配,其结果代码为 0。应该可以使用任务调度程序的 UI 进行设置,或者您可以使用 XPath 过滤。
然后将该任务的操作设置为“发送电子邮件”,并设置所需的任何参数。将附件文件的名称设置为 outfile.txt 的路径,就大功告成了。
您可以使用相同的技术来处理返回代码 1 和 2,以便在必要时警告输出文件为空或丢失。
非常简单,不是吗?:D 让我每天都越来越喜欢 Linux。
编辑如果您有一个可以从命令行运行的邮件程序,您可以简单地从运行命令的脚本中调用它,从而无需创建基于事件的任务。