从任务计划程序运行 powershell 脚本时输出文件为空

从任务计划程序运行 powershell 脚本时输出文件为空

我有一个 powershell 脚本,它将 http 响应正文写入输出。

当我从这样的命令行运行它时,它会将响应写入Emails.log文件

powershell "./InvokeMyApi.ps1 /api/emails/SendEmails" > Emails.log

但是,当我从任务计划程序调用它时,它只会写入空文件。

为了排除缺少权限的情况,我授予了每个人对文件夹的写权限

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2022-01-10T17:18:47.7178478</Date>
    <Author>MyCompany\Liero</Author>
    <URI>\MyApp\SendEmails/URI>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <Repetition>
        <Interval>PT5M</Interval>
        <Duration>P1D</Duration>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <StartBoundary>2023-04-17T05:00:34</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-21-1085031214-1292428093-1177238915-3242</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <WakeToRun>true</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>3</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>powershell</Command>
      <Arguments>"./InvokeIsysApi.ps1 /api/emails/SendEmails" &gt; Emails.log</Arguments>
      <WorkingDirectory>C:\Tools</WorkingDirectory>
    </Exec>
  </Actions>
</Task>

如何将我的 powershell 脚本的输出保存到文件?

答案1

您确定脚本本身确实通过任务计划程序成功运行,因此实际上生成了要传输到文本文件的输出吗?

可能是通过任务计划运行的上下文中存在一个老问题,即没有设置允许其运行的执行策略(我不认为任务计划程序会将其显示为失败,因为已成功调用 Powershell,但失败发生在之后)。尝试设置任务以像这样运行它

powershell -executionpolicy bypass -command "./InvokeMyApi.ps1 /api/emails/SendEmails" > Emails.log

这样就确保执行策略已经设置,而不管它在哪种配置文件下运行。

就我个人而言,我也会指定文件的完整文件夹路径,而不是仅仅依赖当时在正确的文件夹中运行的任务计划程序,但由于它至少会生成一个空文件,所以我猜这不是你的问题。

相关内容