我有一个 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" > Emails.log</Arguments>
<WorkingDirectory>C:\Tools</WorkingDirectory>
</Exec>
</Actions>
</Task>
如何将我的 powershell 脚本的输出保存到文件?
答案1
您确定脚本本身确实通过任务计划程序成功运行,因此实际上生成了要传输到文本文件的输出吗?
可能是通过任务计划运行的上下文中存在一个老问题,即没有设置允许其运行的执行策略(我不认为任务计划程序会将其显示为失败,因为已成功调用 Powershell,但失败发生在之后)。尝试设置任务以像这样运行它
powershell -executionpolicy bypass -command "./InvokeMyApi.ps1 /api/emails/SendEmails" > Emails.log
这样就确保执行策略已经设置,而不管它在哪种配置文件下运行。
就我个人而言,我也会指定文件的完整文件夹路径,而不是仅仅依赖当时在正确的文件夹中运行的任务计划程序,但由于它至少会生成一个空文件,所以我猜这不是你的问题。