运行以下命令将创建任务并具有正确的设置。 “如果未计划任务再次运行,则将其设置为50秒后将其删除。该命令大约需要运行10秒钟。问题在于,它实际上从未从任务计划程序中删除任务。
$run = (Get-Date).AddMinutes(1) # Two minutes from now
Register-ScheduledTask -TaskName $taskname -InputObject (
(
New-ScheduledTask -Action (
New-ScheduledTaskAction -Execute "powershell.exe" -Argument (
"C:\Send-HipchatNotification.ps1 -room '$room' -message '$message' -color
'purple' -notify"
)
) -Trigger (
New-ScheduledTaskTrigger -Once -At ($run.TimeOfDay.ToString("hh\:mm"))
# As a "TimeOfDay" to get 24Hr format
) -Settings (
New-ScheduledTaskSettingsSet -DeleteExpiredTaskAfter 00:00:50 #
Delete one second after trigger expires
)
) | %{ $_.Triggers[0].EndBoundary = $run.AddMinutes(60).ToString('s') ; $_
} # Run through a pipe to set the end boundary of the trigger
)`
答案 0 :(得分:1)
因此,我一直在测试脚本中的异常情况,发现Task Scheduler中可能存在错误。
我注意到,一旦触发器过期,如果您执行
Set-ScheduledTask $taskname
任务被删除。否则,如果任务被搁置,它将在内存中留下鬼对象。
此外,如果您进入Task Scheduler GUI,并在任务到期后尝试编辑该任务,则会给您一个错误,指出Task不存在,并且会无限期地将其自身从内存中删除(大概直到重新启动后为止,但是我还没有测试那么远。
我不确定是否已报告此错误,但要解决此问题,您可能需要在其过期后运行Set-ScheduledTask才能删除任务对象。