首页 > 解决方案 > 创建计划任务时出错

问题描述

我正在尝试使用 PowerShell 5 创建计划任务。但是在尝试特别是添加DeleteExpiredTaskAfterScheduledTaskSettingsSet

-DeleteExpiredTaskAfter (New-TimeSpan -Seconds 120)

下面的 PowerShell 脚本:

$taskname = "Test01"
$taskdescription = "Testing"
$taskpath = "\Test"

$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-NoProfile -WindowStyle Hidden -command "& D:\Test.ps1 -SqlServer Sql1 -Database UAT -Date 2018-03-01 -Start 07:00:00"'

$trigger =  New-ScheduledTaskTrigger -Once -At (Get-Date -Month 06 -Year 2018 -Day 21 -Hour 9 -Minute 40 -Second 00)

$setting = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Day 3) -Hidden -StartWhenAvailable -DeleteExpiredTaskAfter (New-TimeSpan -Seconds 120) -RunOnlyIfNetworkAvailable

$principal = New-ScheduledTaskPrincipal -UserId "LOCALSERVICE" -LogonType S4U

function ScheduledTask-Exists($taskname) {
    $schedule = New-Object -Com Schedule.Service
    $schedule.connect()
    $taskFolder = $schedule.GetFolder($taskpath)
    $taskExists = $taskFolder.GetTask($taskname) |
                  Select-Object Name |
                  Where-Object { $_.Name -eq $taskName }
    if (-not $taskExists) {
        return $false
    }
    return $true
}

if ((ScheduledTask-Exists($taskname))) {
    Write-Output "$taskname already exists"  
} else {
    Register-ScheduledTask -Action $action -Trigger $trigger -TaskPath $taskpath -TaskName $taskname -Description $taskdescription -Settings $setting -Principal $principal -Force 
    Write-Output "Creating Scheduled Task - $taskName"
}

我得到的错误:

Register-ScheduledTask :任务 XML 缺少必需的元素或
属性。(49,4):结束边界:
在 E:\ARUN\TestScript\AutomateScheduledTask.ps1:33 char:4
+ Register-ScheduledTask -Action $action -Trigger $trigger -TaskPath ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Register-ScheduledTask], CimException
    +fullyQualifiedErrorId:HRESULT 0x80041319,Register-ScheduledTask

我尝试添加-Compatibility V1New-ScheduledTaskSettingsSet但没有奏效。

标签: powershellscheduled-taskspowershell-5.0taskscheduler

解决方案


if((ScheduledTask-Exists($taskname))){
   Write-Output "$taskname already exists"  
}
else{
   $run = (Get-Date).AddMinutes(2)
   Register-ScheduledTask -TaskPath $taskpath -TaskName $taskname -InputObject (
  (
    New-ScheduledTask -Action $action -Trigger $trigger -Settings $setting
  ) | %{ $_.Triggers[0].EndBoundary = $run.AddMinutes(30).ToString('s') ; $_} 
)
Write-Output "Creating Scheduled Task - $taskName"
}

从链接stackoverflow answer(2)获取此脚本并对其进行修改,作为解决方法


推荐阅读