Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PowerShell的计划作业在3天后退出_Powershell_Scheduled Tasks - Fatal编程技术网

通过PowerShell的计划作业在3天后退出

通过PowerShell的计划作业在3天后退出,powershell,scheduled-tasks,Powershell,Scheduled Tasks,我有一个脚本可以合法地运行3天以上(这是一个命令队列脚本,所以它有很多暂停等待作业完成)。我正在使用PowerShellRegister ScheduledJobcmdlet创建作业 一切都很好,除了默认情况下,如果脚本在3天后仍未完成,Windows任务计划程序将停止脚本。我可以通过进入GUI并取消选中“如果任务运行时间超过:3天,则停止任务”复选框来解决此问题。我需要能够通过Powershell代码“取消选中”该框。以下是我目前的日程安排: $immediate = (get-date).A

我有一个脚本可以合法地运行3天以上(这是一个命令队列脚本,所以它有很多暂停等待作业完成)。我正在使用PowerShell
Register ScheduledJob
cmdlet创建作业

一切都很好,除了默认情况下,如果脚本在3天后仍未完成,Windows任务计划程序将停止脚本。我可以通过进入GUI并取消选中“如果任务运行时间超过:3天,则停止任务”复选框来解决此问题。我需要能够通过Powershell代码“取消选中”该框。以下是我目前的日程安排:

$immediate = (get-date).AddMinutes(2).ToString("MM/dd/yyyy HH:mm")
$scheduled_date = get-date -Format "yyyyMMMd-HHMMss"
$trigger = New-JobTrigger -Once -At $immediate
$sjo = New-ScheduledJobOption -RunElevated
Register-ScheduledJob -Name "SVC Migrations - $scheduled_date" -ScriptBlock {powershell.exe -File C:\scripts\addvdiskcopy_queue.ps1 } -Trigger $trigger -ScheduledJobOption $sjo >> C:\scripts\temp\job_scheduled.txt
同样,在72小时内,一切都很顺利。感谢您的帮助! 谢谢

退房

看起来您可以使用任务调度器管理的库来实现这一点。您需要下载库并加载DLL。这是一个完全工作的示例(只需更新DLL的路径)

我在我的环境中测试了这个库,它按预期工作。最终结果是“如果任务运行时间超过”复选框被禁用


在任务定义中使用以下设置:

New-ScheduledTaskSettingsSet -ExecutionTimeLimit "PT0S"

只是在服务器2012R2上解决了这个问题,而不必使用外部DLL。 可以使用Register ScheduledTask,但尚未使用Register ScheduledJob进行测试

我以类似于上面的方式创建了带有Register ScheduledTask的注册表,但没有定义ExecutionTimeLimit设置。这给了我3天的默认时间

然后我返回了任务并更改了如下设置:

$Task = Get-ScheduledTask -TaskName "MyTask"
$Task.Settings.ExecutionTimeLimit = "PT0H"
Set-ScheduledTask $Task

以前的帖子,但除了@jdc0589在评论中说的以外,这些选项对我都不起作用。我在运行Windows Server 2016数据中心的Azure VM上运行此脚本

$action = New-ScheduledTaskAction -Execute "java.exe" `
    -Argument "-jar `"D:\Selenium\selenium-grid-extras.jar`"" `
    -WorkingDirectory "D:\Selenium"

$trigger = New-ScheduledTaskTrigger -AtStartup

$everyMinute = New-TimeSpan -Minutes 1
$nolimit = New-TimeSpan -Minutes 0
$settings = New-ScheduledTaskSettingsSet `
    -MultipleInstances IgnoreNew `
    -RestartInterval $everyMinute `
    -RestartCount 999 `
    -Priority 0 `
    -ExecutionTimeLimit $nolimit `
    -StartWhenAvailable `
    -DisallowHardTerminate

Register-ScheduledTask `
    -Action $action `
    -Trigger $trigger `
    -Settings $settings `
    -TaskName "Start SGE Hub" `
    -TaskPath "\Selenium Grid Extras" `
    -Description "At machine startup, run SGE so that the hub can process tests without a logon" `
    -RunLevel Highest `
    -User "SYSTEM" `
    -Force

漂亮。非常感谢你,特雷弗。我必须按照此链接中的说明来识别DLL:@firestarter247:Cool-您真正需要做的就是右键单击DLL,单击“属性”,然后“取消阻止”文件。您可以根据需要标出答案吗?这在具有最新powershell版本的server 2012上不起作用。它只是抛出一个类型错误(需要一个时间跨度)。到目前为止,我找不到一种禁用ExecutionTimeLimit的方法。MSDN表示默认值已禁用,但这是错误的,默认值为3天。指定“New Timespan-Days 0”或“New Timespan-Seconds 0”也会导致默认的3天限制。是的,但您可以在此处使用大约27年的最大时间跨度。这应该是相同的,没有实际用途的限制。请在回答中添加详细信息在Windows 10 v1607 build 14393上对我非常有用这实际上是唯一对我有效的方法!微软应该修复这个错误。+1这对我来说似乎也很好。比公认的答案要好得多,因为没有依赖关系。不适用于我,报告
用户名或密码不正确。
现在适用于我,尽管我100%确定我以前尝试过。
$Task = Get-ScheduledTask -TaskName "MyTask"
$Task.Settings.ExecutionTimeLimit = "PT0H"
Set-ScheduledTask $Task
$action = New-ScheduledTaskAction -Execute "java.exe" `
    -Argument "-jar `"D:\Selenium\selenium-grid-extras.jar`"" `
    -WorkingDirectory "D:\Selenium"

$trigger = New-ScheduledTaskTrigger -AtStartup

$everyMinute = New-TimeSpan -Minutes 1
$nolimit = New-TimeSpan -Minutes 0
$settings = New-ScheduledTaskSettingsSet `
    -MultipleInstances IgnoreNew `
    -RestartInterval $everyMinute `
    -RestartCount 999 `
    -Priority 0 `
    -ExecutionTimeLimit $nolimit `
    -StartWhenAvailable `
    -DisallowHardTerminate

Register-ScheduledTask `
    -Action $action `
    -Trigger $trigger `
    -Settings $settings `
    -TaskName "Start SGE Hub" `
    -TaskPath "\Selenium Grid Extras" `
    -Description "At machine startup, run SGE so that the hub can process tests without a logon" `
    -RunLevel Highest `
    -User "SYSTEM" `
    -Force