我有一个PowerShell脚本(有效)。在Windows任务计划程序中,我创建了一个新任务来执行"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
,将参数作为我的PS1脚本传递。当任务运行时,我得到0x1
的最后运行结果。
我更新了脚本,在脚本打开时写入日志文件,但没有发生。这几乎就像任务甚至无法打开Powershell.exe。
这听起来准确吗?问题是什么或我如何解决它?
如果您遇到的问题是执行策略,那么您还可以设置特定PowerShell调用的执行策略。这是我通过计划任务执行PowerShell时通常所做的事情:
powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File \\path\to\script.ps1
这可以确保您使用don't rely on anything in the user's PowerShell profile,并避免执行该附加代码的开销。
这大多无关紧要;也许如果您正在捕获脚本的输出。大多数情况下,它让我感觉更好。
如果脚本中的某些内容意外地提示用户,则确保您的任务不会无限期地等待。使用此开关,脚本将退出;至少你会有一个错误代码而不是一个挂起的脚本。
您可以在此处使用Unrestricted
或您喜欢的执行政策。这可能是您最需要的。
因为我不希望任务依赖于全局非默认设置,您可能还有其他原因需要在将来进行更改。如果某些其他进程依赖于不同的执行策略,那么这种方式与您的任务不一致。
此外,不必更改默认值总是很好。少记住/记录/测试。
See JohnLBevan's answer for some additional causes of 0x1
result in a scheduled task。
任务调度程序调用的PowerShell脚本有几种可能的原因,可以使用代码0x1
完成:
Run with highest privileges
标志(任务的“常规”选项卡上的复选框)。*-File ".\MyScript.ps1" -Parameter1 'Demo'
这样的方法,请尝试:-Command "& .\MyScript.ps1 -Parameter1 'Demo'"
*正如Ben在评论中指出的那样,Run with highest privileges
不必启用/它取决于脚本是否需要管理员权限(例如,如果某些命令如Set-ExecutionPolicy
或Stop-Process
可能需要这些)。如果您不确定,请尝试勾选该选项,看看它是否解决了您的问题;如果它似乎没有区别,请不加控制。
我以前做过这个并且遇到过类似的问题。它几乎总是PowerShell安全设置。最明显的是,我会仔细检查你的执行政策(假设你已经设定了它)。
该任务运行的用户是哪个?该用户之前是否运行过PowerShell脚本?如果我没记错的话,在第一次运行脚本时(不管执行策略如何),每个用户都会被提示“允许”PowerShell脚本运行(Y / N)。那之前我一直在咬我。尝试:
第一次运行后,您不必再担心,它应该从任务调度程序运行得很好。
根据您的域安全性,您可能还必须设置组执行策略。这篇文章详细介绍了如何做,以及其他一些要检查的内容:PowerShell Security。
以前的答案非常有价值。我在Add Arguments字段中添加了以下值。
-noninteractive -nologo -command "&{path\to\script.ps1}"
确保添加&符号并将路径括在花括号中。不要忘记在&符之前和关闭花括号之后使用双引号。
如果您没有任何错误消息并且不知道问题是什么 - 为什么PowerShell脚本不想从计划任务启动,请执行以下步骤以获得答案:
您应该能够看到所有错误通知。
如果我的一个脚本是:
无法找到类型[System.ServiceProcess.ServiceController]。确保已加载包含此类型的程序集。
在这种情况下,我必须在脚本的开头添加一个额外的行来加载缺少的程序集:
Add-Type -AssemblyName "System.ServiceProcess"
接下来的错误:
使用“1”参数调用“GetServices”的异常:“无法在计算机上打开服务控制管理器”。此操作可能需要其他权限。
select:无法处理该属性,因为属性“Database Name”已存在