我是StackOverflow,PowerShell和编程的新手。我正在尝试注册预定作业,以便在启动时自动运行我的.ps1。
以前,我已成功使用:
$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument "-ExecutionPolicy Bypass $dirpath\$scriptname"
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "my task name" -User SYSTEM -RunLevel Highest
这允许我验证任务计划程序中的操作详细信息/选项。如果不传递-ExecutionPolicy Bypass,我的脚本就不会执行。
新代码:
$trigger=New-JobTrigger -AtStartup
$options=New-ScheduledJobOption -ContinueIfGoingOnBattery -RunElevated -StartIfOnBattery
Register-ScheduledJob -FilePath $dirpath\$scriptname -ArgumentList "-ExecutionPolicy Bypass $dirpath\$scriptname" -Trigger $trigger -ScheduledJobOption $options -Name "my job name"
这不会在计划任务GUI中列出我的参数,并且无法执行。
我选择使用Register-ScheduledJob代替兼容性,因为Register-ScheduledTask似乎只适用于Windows 8 / Server 2012.
感谢您提供任何指导!
答案 0 :(得分:1)
请查看powershell scheduled jobs上的文档。计划作业在后台注册,与计划任务不同。计划作业不会显示在任务计划程序GUI中,只能通过PowerShell访问。
如果你运行Get-ScheduledJob
命令,那么你应该看到你的工作在那里注册,只有你会看到它。请参阅scheduled jobs
答案 1 :(得分:0)
您遇到的问题是,您需要将-ExecutionPolicy Bypass
传递到预定作业的行动中,我不相信这是可行的,如同这是由Register-ScheduledJob
cmdlet本身填充的。如果像我一样,您已经花了一些时间无法弄清楚为什么即使您已将条目添加到-ArgumentList
,该条目仍然有效,这很可能就是原因。< / p>
我可以看到使用-ExecutionPolicy Bypass
运行PS1文件的唯一方法是通过Register-ScheduledTask
和您提供的第一个示例。
或者(可以说是最佳实践)将签署您的PowerShell脚本。