PowerShell脚本将不执行作为Windows计划任务(PowerShell script wo

2019-07-01 19:21发布

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

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

这听起来是否准确? 还有什么问题可以和我怎么解决它?

Answer 1:

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

powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File \\path\to\script.ps1

为什么?

-NoProfile

这确保您不依赖于用户的PowerShell配置什么 ,避免执行额外代码的开销。

-nologo

这主要是没有关系; 也许它,如果你拍摄脚本的输出。 主要是它让我感觉更好。

-nonInteractive

确保您的任务不会无限期地等待,如果事情在你的脚本意外地提示用户。 有了这个开关,该脚本将退出只是代替; 至少你有一个错误代码,而不是挂脚本。

-ExecutionPolicy旁路

您可以使用Unrestricted这里或任何执行策略你喜欢。 这可能是你最需要的人

为什么我喜欢设置执行策略是这样的:

因为我不希望任务取决于你可能有其他原因,在将来改变一个全球性的默认设置。 如果一些其他进程依赖于不同的执行策略,那么它是不是在你的任务这样的赔率。

加上它总是很高兴没有不得不改变默认设置。 减记/文件/测试。

奖金

见JohnLBevan的答案的一些附加原因0x1导致计划任务 。



Answer 2:

有由任务调度程序调用的代码完成PowerShell脚本几个可能的原因0x1

  • 执行策略不允许脚本运行。 见Briantist的出色答卷关于这个细节。
  • 该任务没有Run with highest privileges标志(该任务的常规选项卡上的复选框)启用。*
  • 参数被传递给脚本不正确。 如果使用的方法,如-File ".\MyScript.ps1" -Parameter1 'Demo' ,而不是尝试: -Command "& .\MyScript.ps1 -Parameter1 'Demo'"

*由于本在评论中指出Run with highest privileges不必启用/这取决于如果脚本需要管理员权限(例如,如果像一些指令Set-ExecutionPolicyStop-Process可能需要这些)。 如果你不知道,尝试勾选选项,看看是否能解决您的问题; 如果似乎有所作为不,不要选择它。



Answer 3:

我以前也这样做,也有类似的问题。 这几乎总是PowerShell的安全设置。 最明显的是,我会仔细检查你的执行策略(假设你已经设置)。

其中用户执行任务运行的? 有用户之前运行PowerShell脚本? 如果我没记错的话,每个系统将提示用户“允许”的PowerShell脚本运行(Y / N),运行首次脚本时(不管执行的政策)。 以前已经咬我。 尝试:

  • 登录-以该用户
  • 检查执行政策
  • 从PowerShell提示符开球脚本
  • 回复遵循任何提示。

第一次运行之后,你不应该再担心这一点,这应该从任务调度就好运行。

根据您的域安全,你可能还需要设置组执行策略。 下面是一篇文章,详细介绍了如何做到这一点,以及其他几件事情要检查: PowerShell的安全性



Answer 4:

以前的答案是很有价值的。 我加在添加参数字段值以下。

-noninteractive -nologo -command "&{path\to\script.ps1}"

确保添加的符号和封闭路径大括号内。 不要忘记符号之前闭花括号后有双引号。



Answer 5:

如果你没有任何错误信息,不知道是什么问题 - 为什么PowerShell脚本不想从计划任务启动,请执行下列操作步骤,得到的答案:

  1. 运行CMD为用户谁已设置计划任务执行的PowerShell脚本
  2. 浏览到PowerShell脚本所在的文件夹
  3. 执行PowerShell脚本(清除堵塞错误通知,如果像$ ErrorActionPreference =“silentlycontinue”脚本内部的任何存在的所有语句)

你应该能够看到所有的错误通知。

在我的剧本之一的情况下,它是:

找不到类型[System.ServiceProcess.ServiceController。 确保包含此类型的程序集被加载。

在这种情况下我必须在脚本加载缺少的组件的开头添加一个额外的行:

Add-Type -AssemblyName "System.ServiceProcess"

而接下来的错误:

异常调用“GetServices”与“1”的说法(S):“无法在计算机上打开服务控制管理器'这个操作可能需要其他特权。”

选择:属性不能被处理,因为属性“数据库名称”已存在



文章来源: PowerShell script won't execute as a Windows scheduled task