这是我迄今为止收集到的。我需要一个仅运行一次的计划任务,在下次启动时(无论何时),并且在运行后它应该删除自身。
Register-ScheduledTask -TaskName "Test 1" -InputObject (
(
New-ScheduledTask -Action (
New-ScheduledTaskAction -Execute "PowerShell.exe"
) -Trigger (
New-ScheduledTaskTrigger -Once -AtStartup # both of these can't be used
) -Settings (
New-ScheduledTaskSettingsSet -DeleteExpiredTaskAfter 00:00:01
)
) | ForEach-Object { $_.Triggers[0].EndBoundary = <# 1 second after task is run #> ; $_ }
)
我不确定是否可能,如果不可能,请告诉我,以便我探索其他选项,但如果可以,我需要帮助弄清楚如何实现它。 EndBoundary
看起来需要一个日期,但我没有任何日期,因为不知道下一次启动的时间。
我这样做是因为我需要在下次启动时(时间未知)运行 PowerShell 代码,并且仅运行 1 次。
最佳答案
-Once
仅适用于基于日历的触发器,例如“每月”、“每周”等。您不能将其与 -AtStartup
结合使用,以便它仅针对一个启动运行。
-DeleteExpiredTaskAfter
仅适用于到期日期。但到期日期不适用于 -AtStartup
,因为任务可能会在计算机启动之前到期。
执行后自行删除任务的一个简单方法是将删除添加到您正在执行的 PowerShell 脚本中。只需将以下行添加到您的 PowerShell 脚本中:
Unregister-ScheduledTask -TaskName 'Test 1' -Confirm:$false
您也可以禁用它,以便它不再运行,但您可以获得有关它何时运行以及结果是什么的信息:
Disable-ScheduledTask -TaskName 'Test 1'
如果您不想修改主要操作,您还可以添加第二个操作,其定义如下:
New-ScheduledTaskAction -Execute powershell -Argument "-Command `"Unregister-ScheduledTask -TaskName 'Test 1' -Confirm:`$false`""
总的来说,您的任务定义可能如下所示:
Register-ScheduledTask -TaskName "Test 1" -InputObject (
(
New-ScheduledTask -Action (
(New-ScheduledTaskAction -Execute "PowerShell.exe"),
(New-ScheduledTaskAction -Execute powershell -Argument "-ExecutionPolicy ByPass -Command `"Unregister-ScheduledTask -TaskName 'Test 1' -Confirm:`$false`"")
) -Trigger (
New-ScheduledTaskTrigger -AtStartup
)
)
)
关于powershell - 在PowerShell中,如何创建一个在启动时仅运行1次然后自行删除的计划任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76368440/