首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过PowerShell安排工作3天后退出

通过PowerShell安排工作3天后退出
EN

Stack Overflow用户
提问于 2014-04-08 17:57:47
回答 5查看 8.8K关注 0票数 5

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

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

代码语言:javascript
复制
$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小时内,一切都很顺利。任何帮助都是非常感谢的!谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-04-08 19:16:04

看看CodePlex上的这个线程

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

代码语言:javascript
复制
$TaskName = 'asdf';

# Unregister the Scheduled Job if it exists
Get-ScheduledJob asdf -ErrorAction SilentlyContinue | Unregister-ScheduledJob;

# Create the Scheduled Job
$Trigger = New-JobTrigger -At '5:00 PM' -Once;
$Option = New-ScheduledJobOption;
$Action = { Write-Host 'hi'; };
$Job = Register-ScheduledJob -Name asdf -ScriptBlock $Action -Trigger $Trigger -ScheduledJobOption $Option;

# Modify the Scheduled Job using external library
Add-Type -Path "C:\Users\Trevor\Downloads\TaskScheduler\Microsoft.Win32.TaskScheduler.dll";
$TaskService = New-Object -TypeName Microsoft.Win32.TaskScheduler.TaskService;
$Task = $TaskService.FindTask($TaskName, $true);
$Task.Definition.Settings.ExecutionTimeLimit = [System.TimeSpan]::Zero;
$Task.RegisterChanges();

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

票数 6
EN

Stack Overflow用户

发布于 2016-11-12 02:01:48

代码语言:javascript
复制
New-ScheduledTaskSettingsSet -ExecutionTimeLimit 0
票数 12
EN

Stack Overflow用户

发布于 2017-02-16 12:43:34

只是在Server2012R2上解决了这个问题,而不必使用外部DLL。工作与寄存器-ScheduledTask,但尚未测试的寄存器-ScheduledJob。

我以类似于上面的方式创建了with Register,但是没有定义ExecutionTimeLimit设置。这给了我3天的违约时间。

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

代码语言:javascript
复制
$Task = Get-ScheduledTask -TaskName "MyTask"
$Task.Settings.ExecutionTimeLimit = "PT0H"
Set-ScheduledTask $Task
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22944719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档