当任务计划程序运行时显示正在执行的 CMD 窗口

当任务计划程序运行时显示正在执行的 CMD 窗口

我有一个在 Windows Server 2016 上运行的任务。任务运行时的用户帐户始终处于登录状态。任务运行时,它会启动 FBCMD.exe,这是一个执行某些参数的 FinalBuilder 程序。当我通过批处理文件启动此程序时,我会看到窗口。但是当任务计划程序使用完全相同的参数启动此程序时,它会在后台运行。我希望显示此窗口。事实上,当我们在 Win7 中运行它时,它确实显示了。以下是任务设置的图像。可以做到这一点吗?

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

答案1

以交互方式运行计划任务

只需检查Run only when user is logged on来自一般的标签和安全选项部分以确保该过程与登录会话可见/交互地运行。

既然你说“运行任务的用户帐户始终处于登录状态“并且预期结果是当任务计划程序作业执行该流程,那么您只需进行简单的调整即可获得预期的结果。

在此处输入图片描述


更多资源

答案2

有条件地交互或不交互地运行计划任务

如果需要有条件地以交互方式运行计划任务任务计划程序如果某个特定用户帐户登录到系统或以非交互方式运行它,那么我将概述一些步骤,以根据某些条件逻辑和批处理脚本获得预期的结果。

本质上这个解决方案需要一些简单的东西……

  1. 定义计划任务以与Run only when user is logged on选择当用户帐户使用以下方式登录时运行的选项未定义触发器
  2. 定义另一个计划以非交互方式运行Run whether user is logged on or not选择当用户帐户未使用以下方式登录时运行的选项未定义触发器
  3. 创建一个批处理脚本(见下面的示例),该脚本将检查用户帐户是否已登录,并根据结果执行交互式或非交互式计划任务
  4. 定义另一个计划以非交互方式运行Run whether user is logged on or not选择当用户帐户未使用以下方式登录时运行的选项触发器定义为您需要运行作业的频率,无论是否交互—因此这将是执行上面#1 或#2 中的另外两个作业之一的计划作业。

批处理脚本

这使用查询会话查找字符串检查适用的用户名是否已登录到机器控制台。然后使用调度任务无需任何触发器即可执行您定义的交互式或非交互式计划任务。

您将需要将该值更改SET username=为您需要的值,以检查帐户名称,如果存在,您需要它与该会话交互运行(例如<Domain>\<Username>

@ECHO OFF
SET username=user

query session | findstr /I /M "%username%" | findstr /I /M "console"
IF ERRORLEVEL 0 GOTO :InteractiveTask
GOTO :NonInteractiveTask

:InteractiveTask
SCHTASKS /Run /TN "\_SuperUserTesting\FinalBuilder_i"
EXIT

:NonInteractiveTask
SCHTASKS /Run /TN "\_SuperUserTesting\FinalBuilder_n"
EXIT

重要的:您需要确保地点和任务姓名完整路径指定为/TN完整路径调度任务命令指向正确的任务和路径位置,每个层次结构中你保存的每个命令任务计划程序—请参阅下面的屏幕截图以进一步说明。 在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

此外,您还需要确保允许按需运行任务设置为设置每个计划任务的选项卡,将使用调度任务

在此处输入图片描述


计划任务

交互式计划任务必须Run only when user is logged on一般的选项卡以便以交互方式运行它。

在此处输入图片描述

非交互式任务必须Run whether user is logged on or not一般的选项卡,以便在该帐户未登录到机器时运行它。

在此处输入图片描述

检查确定使用批处理脚本运行哪个计划任务的任务必须Run whether user is logged on or not一般的选项卡,以便它无论如何都会运行。除此之外,您还可以设置触发器按照您希望的任何时间安排。

在此处输入图片描述


更多资源

相关内容