我有一组Windows虚拟机,我每分钟使用任务调度程序(schtasks.exe)运行任务
有一个批处理文件可以创建任务,如下所示:
SCHTASKS.EXE /Delete /TN "my_server" /F
SCHTASKS.EXE /CREATE /SC MINUTE /MO 1 /TN "my_server" /TR X:\mydrive\server.bat /RU %computername%\<username>
SCHTASKS.EXE /RUN /TN "my_server"
因此,每当打开命令提示符窗口时,此任务都会每分钟运行一次。
我希望此任务每分钟运行一次,但不是每次都打开命令提示符 时间 - 它应该以最小化模式运行。
在Google搜索解决方案后,我在stackoverflow上找到了一些答案,尝试 / RU&#34; NT Authority \ System&#34; 而不是当前用户。所以我也尝试过这个:
SCHTASKS.EXE /CREATE /SC MINUTE /MO 1 /TN "my_server" /TR X:\mydrive\server.bat /RU "NT AUTHORITY\SYSTEM"
但它对我没有用,不知道为什么。它没有报告任何错误,我可以在命令提示符上看到&#34;任务已成功创建,尝试运行任务&#34;,它安排了任务但没有启动任务。 / p>
答案 0 :(得分:0)
我认为您无法在计划任务下完成此任务。但是,还有其他方法。
一种方法是创建一个可执行(exe)程序,该程序将批处理文件作为子进程运行,然后使exe没有窗口或将窗口置于屏幕外。这类似于创建批处理文件的快捷方式,并将布局选项卡下的快捷方式的窗口位置属性更改为5000,5000。这种方法有效,但它确实在任务栏中放置一个图标,在运行后消失。遗憾的是,您无法从计划任务中运行该快捷方式。尝试从任务管理器运行批处理文件时,请注意该任务作为taskeng(任务引擎)的子进程运行,并且该进程控制cmd.exe实例。我不知道一个事实,但我怀疑taskeng读取快捷方式并执行其内容,而不是让cmd直接处理快捷方式。
如果你有某种编译器,你可以使用Windows shell创建一个在隐藏或最小化窗口中运行批处理文件的exe。使用最小化窗口,您仍然可以获得任务栏图标。使用隐藏窗口,您既不会获得cmd窗口,也不会获得任务栏图标。我也听说你也可以用VBS脚本做到这一点。
我有一份工作,客户想要动态创建批处理文件,运行它,并立即删除批处理文件,以免被用户篡改。您也可以使用exe执行此操作。
还有一种方法可以使用INNO Setup进行安装程序。您在批处理文件中包含批处理文件,运行它,然后删除批处理文件。 INNO有一个命令行开关/ VeryQuiet,可以与产生的exe一起使用来隐藏用户界面窗口。这可以在计划任务中使用。
有关Vista及更高版本下的计划任务的一些注意事项:如果选择“运行用户是否登录”,任务将使用S4U身份验证,因此您的批处理文件将无法访问任何网络资源,例如映射驱动器或UNC路径。如果您使用选择“使用最高权限”,它将在安装Windows时创建的内置管理员帐户下运行。这不会提升给定用户具有管理员组权限,但是具有单独安全令牌的实际单独用户帐户。因此,它不会看到任何用户的资源,如映射驱动器,它也将使用S4U autehntication,因此也不会有其他网络访问。
还有Windows AT.exe实用程序。输入AT /?在命令提示符下。 AT命令设置没有用户界面的任务。查看它是否在给定时间运行的唯一方法是通过任务管理器,因为没有窗口或任务栏图标。缺点是它每天只记录一项任务。因此,您必须设置一种方法来创建批处理文件,以便为您希望它运行的时间段内的每一分钟创建任务,例如
AT 08:00 SomeBatchFile.bat
AT 08:01 SomeBatchFile.bat
AT 08:02 SomeBatchFile.bat
.
.
.
我很确定它需要登录用户,因此在没有人登录时无法运行。但是,我没有测试这个。从您的帖子中不清楚计划任务所需的安全性。在登录用户下运行也将启用网络资源访问。
我测试了这些任务是否能够在重新启动后继续存在。他们这样做,所以他们将在重启后出现。你只能用
摆脱它们AT <Task#> /DELETE
我不知道它们是否适用于虚拟机。
我不知道AT命令使用了哪些资源,但是如果要运行1440个实例24小时或720个实例运行12个小时,它可能会使系统陷入困境。