我有一个PowerShell脚本(的作品)。 在Windows任务计划程序我创建了一个新的任务来执行"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
,传递的参数作为我的PS1脚本。 任务运行时,我得到的最后的运行结果0x1
。
我更新了我的脚本,该脚本打开时写入日志文件,并且没有发生。 这几乎就像任务甚至无法打开Powershell.exe。
这听起来是否准确? 还有什么问题可以和我怎么解决它?
我有一个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
这确保您不依赖于用户的PowerShell配置什么 ,避免执行额外代码的开销。
这主要是没有关系; 也许它,如果你拍摄脚本的输出。 主要是它让我感觉更好。
确保您的任务不会无限期地等待,如果事情在你的脚本意外地提示用户。 有了这个开关,该脚本将退出只是代替; 至少你有一个错误代码,而不是挂脚本。
您可以使用Unrestricted
这里或任何执行策略你喜欢。 这可能是你最需要的人 。
因为我不希望任务取决于你可能有其他原因,在将来改变一个全球性的默认设置。 如果一些其他进程依赖于不同的执行策略,那么它是不是在你的任务这样的赔率。
加上它总是很高兴没有不得不改变默认设置。 减记/文件/测试。
见JohnLBevan的答案的一些附加原因0x1
导致计划任务 。
有由任务调度程序调用的代码完成PowerShell脚本几个可能的原因0x1
:
Run with highest privileges
标志(该任务的常规选项卡上的复选框)启用。* -File ".\MyScript.ps1" -Parameter1 'Demo'
,而不是尝试: -Command "& .\MyScript.ps1 -Parameter1 'Demo'"
*由于本在评论中指出Run with highest privileges
不必启用/这取决于如果脚本需要管理员权限(例如,如果像一些指令Set-ExecutionPolicy
或Stop-Process
可能需要这些)。 如果你不知道,尝试勾选选项,看看是否能解决您的问题; 如果似乎有所作为不,不要选择它。
我以前也这样做,也有类似的问题。 这几乎总是PowerShell的安全设置。 最明显的是,我会仔细检查你的执行策略(假设你已经设置)。
其中用户执行任务运行的? 有用户之前运行PowerShell脚本? 如果我没记错的话,每个系统将提示用户“允许”的PowerShell脚本运行(Y / N),运行首次脚本时(不管执行的政策)。 以前已经咬我。 尝试:
第一次运行之后,你不应该再担心这一点,这应该从任务调度就好运行。
根据您的域安全,你可能还需要设置组执行策略。 下面是一篇文章,详细介绍了如何做到这一点,以及其他几件事情要检查: PowerShell的安全性 。
以前的答案是很有价值的。 我加在添加参数字段值以下。
-noninteractive -nologo -command "&{path\to\script.ps1}"
确保添加的符号和封闭路径大括号内。 不要忘记符号之前闭花括号后有双引号。
如果你没有任何错误信息,不知道是什么问题 - 为什么PowerShell脚本不想从计划任务启动,请执行下列操作步骤,得到的答案:
你应该能够看到所有的错误通知。
在我的剧本之一的情况下,它是:
找不到类型[System.ServiceProcess.ServiceController。 确保包含此类型的程序集被加载。
在这种情况下我必须在脚本加载缺少的组件的开头添加一个额外的行:
Add-Type -AssemblyName "System.ServiceProcess"
而接下来的错误:
异常调用“GetServices”与“1”的说法(S):“无法在计算机上打开服务控制管理器'这个操作可能需要其他特权。”
选择:属性不能被处理,因为属性“数据库名称”已存在