PowerShell脚本不会作为Windows计划任务执行

ewi*_*ows 28 powershell scheduled-tasks

我有一个PowerShell脚本(有效).在Windows任务计划程序中,我创建了一个要执行的新任务"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe",将参数作为我的PS1脚本传递.当任务运行时,我得到一个上次运行结果0x1.

我更新了脚本,在脚本打开时写入日志文件,但没有发生.这几乎就像任务甚至无法打开Powershell.exe.

这听起来准确吗?问题是什么或我如何解决它?

bri*_*ist 55

如果您遇到的问题是执行策略,那么您还可以设置特定PowerShell调用的执行策略.这是我通过计划任务执行PowerShell时通常所做的事情:

powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File \\path\to\script.ps1
Run Code Online (Sandbox Code Playgroud)

为什么?

-NoProfile

这可确保您不依赖于用户PowerShell配置文件中的任何内容,并避免执行该附加代码的开销.

-nologo

这大多无关紧要; 也许如果您正在捕获脚本的输出.大多数情况下,它让我感觉更好.

-nonInteractive

如果脚本中的某些内容意外地提示用户,则确保您的任务不会无限期地等待.使用此开关,脚本将退出; 至少你会有一个错误代码而不是一个挂起的脚本.

-ExecutionPolicy Bypass

您可以Unrestricted在此处使用,也可以使用您喜欢的执行策略.这可能是您最需要的.

为什么我更喜欢以这种方式设置执行策略:

因为我不希望任务依赖于全局非默认设置,您可能还有其他原因需要在将来进行更改.如果某些其他进程依赖于不同的执行策略,那么这种方式与您的任务不一致.

此外,不必更改默认值总是很好.少记住/记录/测试.

奖金

请参阅JohnLBevan关于0x1计划任务中导致结果的其他原因的答案.

  • 一个旧答案,但它仍然在解决问题 - 谢谢!这解决了使用管理员帐户工作正常但无法使用服务帐户正常运行的计划任务的问题.检查权限,一切看起来很好,但仍然收到错误.如上所列运行修复了问题. (2认同)
  • 对我来说,我发现“File”开关必须在“ExecutionPolicy”之后*一次,我重新排列了参数以匹配这个答案,它开始工作 (2认同)

Joh*_*van 5

任务计划程序调用PowerShell脚本以完成代码的原因可能有多种0x1

  • 执行策略不允许脚本运行。有关详细信息,请参见Briantist的出色答案
  • 该任务未Run with highest privileges启用标志(任务的“常规”选项卡上的复选框)。*
  • 参数被错误地传递给脚本。如果使用的方法-File ".\MyScript.ps1" -Parameter1 'Demo',请尝试:-Command "& .\MyScript.ps1 -Parameter1 'Demo'"

*正如Ben在评论中指出的,Run with highest privileges不必启用/取决于脚本是否需要管理员权限(例如,某些命令是否需要Set-ExecutionPolicyStop-Process不需要这些权限)。如果不确定,请尝试勾选该选项以查看它是否可以解决您的问题;如果看起来没有什么不同,请不要勾选。