我使用脚本创建一个Windows计划任务,在提升模式下调用powershell脚本,以便在系统启动时使用boxstarter运行Windows更新(即使在执行期间有重启,工具也可以自动继续运行代码)。但不确定原因,这个任务可以在启动后调用,但什么都没做。如果我在任务管理器中手动启动计划任务,它将按预期运行。
注册计划任务的脚本:
$TaskActionArgument ="-noprofile -command "&{start-process powershell -argumentList '-File C:\users\administrator\updatescript\boxstarter.ps1 -verb runas'}""
$TaskAction = New-ScheduledTaskAction -Execute "C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" -argument $TaskActionArgument
$TaskTrigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName boxstarter -Action $TaskAction -Trigger $TaskTrigger -User administrator -Password Vmc12svt -RunLevel Highest
我检查了事件日志查看器,并查看了预定作业的以下错误消息:
系统
提供商
[名称] PowerShell
EventID 403
[Qualifiers] 0
等级4
任务4
关键字0x80000000000000
TimeCreated
[SystemTime] 2018-01-10T18:21:12.000000000Z
EventRecordID 267
渠道Windows PowerShell
电脑WIN-6HSHKOKP31E
安全性
- EventData
已停止可用NewEngineState =已停止 PreviousEngineState =可用SequenceNumber = 16 HostName = ConsoleHost HostVersion = 4.0 HostId = 13ece112-b027-4051-9ddf-1a195d3aa30f HostApplication = C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \ powershell.exe -File C:\ users \ administrator \ updatescript \ boxstarter.ps1 -verb runas EngineVersion = 4.0 RunspaceId = d158a216-18e3-4e86-9ade-b232201c9cdc PipelineId = CommandName = CommandType = ScriptName = CommandPath = 的CommandLine =
对于错误消息,我用Google搜索并找到了错误代码here
的说明一般情况下,该页面表示此问题可能是由以下错误引起的:
以上情况属于我的系统。
那么我的计划任务有什么错误?我怎么能让它发挥作用?
答案 0 :(得分:0)
您可以通过手动创建计划任务然后尝试运行它来解决此问题。
尝试将TaskActionArgument
属性更改为以下字符串:
-NoProfile -ExecutionPolicy Bypass -File C:\users\administrator\updatescript\boxstarter.ps1
您不需要Start-Process
或-Verb runas
。事实上,-Verb runas
实际上会使事情无法正常工作,因为它会引发UAC提示,在尝试自动化时您并不想要这样做。
答案 1 :(得分:0)
看起来您的所有服务都没有设置好。这是在启动/登录时运行的常见问题。 New-ScheduledTaskTrigger有一个-RandomDelay参数。我建议你修补它,如果它是你自己的机器,你正在测试它。我的例子使用1分钟。
$TaskTrigger = New-ScheduledTaskTrigger -AtStartup -Delay (New-TimeSpan -Minutes 1)
如果你想要一分钟左右,那么所有需要的服务都应该启动。
您要做的另一件事是将您的代码放在try / catch中,因此错误被写入日志文件,因此您可以在PowerShell的上下文中看到错误,这可能会提供比您在事件日志中获得的更详细的消息。