我遇到了一个问题,当脚本从计划任务运行时,部分 powershell 脚本无法执行。手动执行时,它可以正常运行。
例如,我在脚本中有以下内容:
add-content c:\some_folder\output.txt "howdy"
c:\windows\system32\notepad.exe
当我手动运行脚本时,两个命令都会执行。当计划任务运行时,第一个命令会执行,但第二个命令不会执行。这是一个过于简单的例子,但我有更复杂的脚本,我得到了类似的行为......脚本在手动运行时会执行它应该执行的操作,但从计划任务运行时部分不会运行。
计划任务设置为以本地管理员身份运行,并选择“以最高权限运行”选项。
有任何想法吗?
答案1
您给出的示例的问题在于,notepad.exe
需要交互式会话才能显示 UI。运行计划任务时,没有交互式会话来托管 UI。
答案2
您在域名中工作吗?
尝试修改\system32\cmd.exe的安全权限,并添加具有完全控制权的内置帐户BATCH。
此脚本是否使用任何网络资源?如果您通过网络调用,本地管理员将不会执行此操作。
当计划任务运行时,退出代码是什么?0x0 表示成功。0x1 和 0x2 很常见。查看 c:\windows\Schedlgu.txt,它会为您提供更多信息。
找到 CMD.EXE,右键单击并选择“以您正在安排的帐户身份运行”。在此命令提示符中导航到脚本位置并从那里运行脚本。确保您已从顶部删除 @ECHO OFF(如果您已使用它),以便您可以看到所有内容。
这应该能让你看到它失败的地方。
编辑:此外,在脚本的每个阶段添加一条 echo 行也会有所帮助。例如,当我遇到问题时,我经常在开头放置一个“Echo Starting the script >>checking.txt”,然后在每个阶段或任何主要操作之后添加类似的内容。然后,您可以看到最后一次执行发生的位置,如果您依赖变量将它们也放入输出中,那么它也会很有帮助,因此在其中添加一个“var 当前为 %var%”。
你能粘贴完整的脚本吗?