将Register-ScheduledJob与-ExecutionPolicy参数一起使用

时间:2015-10-21 18:31:53

标签: powershell

我是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.

感谢您提供任何指导!

2 个答案:

答案 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脚本。

相关问题