【问题标题】:Task Scheduler executes script but does not output to log file任务计划程序执行脚本但不输出到日志文件
【发布时间】:2023-02-21 20:35:48
【问题描述】:

我遇到了以下问题:

我有一个跨多个 Azure VM 运行的任务计划程序作业,它计划在每周三晚上 11 点左右运行。

据我所见,脚本执行了所需的更改,但它不会生成日志输出文件

enter image description here

我使用的论据如下:

-F C:\Users\Admin\Desktop\scripts\automatexml_weu.ps1 -详细 > C:\Users\Admin\Desktop\scripts\xml_script_logs\xml_script_output_$(Get-Date -格式“yyyyMMdd”).log

但是永远不会生成日志文件。

如果我在 Task Scheduler 之外运行上述命令,它可以正常工作

有人知道我哪里出错了吗?

提前致谢

【问题讨论】:

    标签: powershell windows-task-scheduler


    【解决方案1】:

    不幸的是,似乎不可能通过任务计划程序以这种方式执行此操作。

    “计划任务无法以这种方式重定向。您必须重定向到 PowerShell 脚本内的文件。支持该重定向的是 PowerShell。”- technet

    【讨论】:

      【解决方案2】:

      有点晚了,但它可能会帮助其他人。在任务调度程序中重定向 powershell 输出有点棘手。

      如果您使用 -file 参数传递脚本,则重定向始终由任务调度程序 CLI 处理,它完全不知道 $(Get-Date -format "yyyyMMdd") 的含义并尝试(未成功)将其解释为文件名。此外,由于 $(Get-Date -format "yyyyMMdd") 包含空格字符,CLI 将其拆分为多个参数,给命令行增加了更多混乱。如果你确实想使用-file,你必须从%date%重建日期

      另一方面,如果您将 -file 替换为 -command 并将 > 引用为 ^ 以将其从任务调度程序 CLI 中隐藏,则重定向将由理解 $(Get-Date -format "yyyyMMdd")powershell 处理。请注意,任务调度程序 CLI 以与 CMD 相同的方式解释 ",因此它将删除它们。在这种情况下,这不是问题,因为 Get-Date-f 正在等待 [String] 参数,但是如果您使用 $((get-date).tostring("yyyyMMdd")),您将收到错误消息。所以只需将"替换为'(例如$((get-date).tostring('yyyyMMdd'))

      总而言之,您的参数应为-command C:UsersAdminDesktopscriptsutomatexml_weu.ps1 -Verbose ^> C:UsersAdminDesktopscriptsxml_script_logsxml_script_output_$(Get-Date -format 'yyyyMMdd').log

      最后一点,如果你只重定向流 1,你将只会得到你的脚本发送到输出流的内容,而永远不会得到错误/警告/详细/流的内容。如果您对它们感兴趣(我想您在命令中有-verbose),只需将命令参数中的^>替换为^*^>即可。

      【讨论】:

        猜你喜欢
        • 2020-11-06
        • 2022-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        • 2022-12-14
        • 1970-01-01
        • 2018-05-17
        相关资源
        最近更新 更多