【发布时间】:2022-01-08 15:24:26
【问题描述】:
当我运行以下脚本来创建计划任务时,我收到错误
错误类型(HRESULT 异常:0x80020005 (DISP_E_TYPEMISMATCH))
$u = "domain\$env:username"
$p = "SomePassword"
$UserPass = ConvertTo-SecureString $p -AsPlainText -Force
$TaskName = "ML"
$TaskDescr = "Descriptor"
$TaskCommand = "$pos\$nm"
$TaskStartTime = [datetime]::Now.AddMinutes(5)
$service = new-object -ComObject("Schedule.Service")
$service.Connect()
$rtFr = $service.GetFolder("\")
$TaskDefinition = $service.NewTask(0)
$TaskDefinition.RegistrationInfo.Description = "$TaskDescr"
$TaskDefinition.Settings.Enabled = $true
$TaskDefinition.Settings.AllowDemandStart = $true
$triggers = $TaskDefinition.Triggers
$dd = "T"
$vv = "yyyy-MM-dd"
$xx = "HH:mm:ss"
$pr = "$vv$dd$xx"
$trigger = $triggers.Create(9)
$trigger.StartBoundary = $TaskStartTime.ToString($pr)
$trigger.Enabled = $true
$Action = $TaskDefinition.Actions.Create(0)
$action.Path = "$TaskCommand"
$rtFr.RegisterTaskDefinition("$TaskName",$TaskDefinition,6,$u,$UserPass,5)
【问题讨论】:
-
很多 COM 对象不能在非交互式会话中使用。老实说:我不明白你为什么要使用 com 对象来创建计划任务,因为 Powershell 有一些内置的 cmdlet 可以做到这一点
-
发布完整错误会很有帮助。另外,同意 Bluuf,为什么不使用内置的 cmdlet?即:
New-ScheduledTask -
尝试
$trigger.StartBoundary = $TaskStartTime.ToString("o")使用round-trip specifier。StartBoundary属性需要日期为格式为yyyy-MM-ddTHH:mm:ss(+-)HH:MM的字符串。见the docs -
感谢您的评论,使用 COM 对象是因为内置 cmdlet 在 Windows 7 版本上不可用,我尝试使其工作。
-
由于 Windows 7 不再受支持(并且已经停止支持很长一段时间了),我真的建议不要使用这个操作系统。除了安全方面,它还使得从人们那里获得帮助变得更加困难(尤其是当代码由于缺少或过时的库而无法工作时)
标签: powershell exception task runtime scheduled-tasks