如何通过电子邮件发送计划任务的输出?

如何通过电子邮件发送计划任务的输出?

在 Unix 系统上,计划任务服务将通过电子邮件发送计划任务产生的任何输出。如果没有产生输出,则不会发送电子邮件。如何在 Windows Server 2003 或 2008 上执行相同操作?有没有办法调用批处理文件或可执行文件来运行我的任务、捕获输出,并且仅在有输出时才通过电子邮件发送?

如果您提出 PowerShell 解决方案,请注意我只有 PowerShell 1.0。

答案1

我使用 autoIT 来处理这类事情。它非常易于使用,并且内置了此功能。帮助文件中充满了示例和代码片段,它们可以完全满足您的需求。如果我对手头的任务有更多详细信息,我就会给出更具体的答案。

您应该能够从这里找到您需要的内容。

答案2

至少在 Windows Server 2008 上,您可以使用以下路线:

  1. 使用任务计划程序设置常规任务。如果您需要捕获程序的输出,我假设它是一个命令行程序。您可以重定向命令输出在 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
    )
    
  2. 计划任务记录在应用程序和服务事件日志中,位于 Microsoft > Windows > 任务计划程序 > 操作下。

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

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

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

  3. 您可以使用相同的技术来处理返回代码 1 和 2,以便在必要时警告输出文件为空或丢失。

非常简单,不是吗?:D 让我每天都越来越喜欢 Linux。

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

相关内容