【问题标题】:How can I find out, from within a .bat- (or .ps1-) script, if it was started by the task scheduler?如何从 .bat-(或 .ps1-)脚本中找出它是否由任务调度程序启动?
【发布时间】:2014-12-09 13:07:20
【问题描述】:

正如问题所述,我实际上很感兴趣,但我所追求的是一种暂时禁用计划运行的机制(在多个服务器上,使用共享磁盘),同时仍然能够以交互方式运行它(如果可以制作脚本来判断它是否从任务调度程序启动)。外部标志(文件的存在)似乎是一种简单的方法。

第一个选项使用“%SESSIONNAME%”,从调度程序启动时它似乎是空的,尽管从 powershell 启动时也是如此(使用 Start-Process,这可能是禁用时允许使用的选项)。

编辑:第二个选项,使用whoami cmd-command 似乎更有希望,它报告用户属于组 NT AUTHORITY\BATCH 从任务调度程序运行时(但不是当交互式运行)。我可以用这个在脚上开枪吗?可以在我背后“永久”地将用户添加到该组吗?

我们使用的是 Windows Server 2012 R2。 PowerShell 解决方案会很有趣,因为可能会使用包装器(甚至可以将 .bat 修改/重写为 .ps1)。

【问题讨论】:

  • 让预定版本将/sched命令行传递给bat?
  • 谢谢,你的意思是像命令行参数?几乎是作弊 ;-)
  • 当然,对我来说似乎是一种可以接受的方法
  • 当然(也谢谢),我可能会这样做,但我宁愿将这个逻辑“隐藏”在脚本中。如果它是合理可行的,它可能会为其他脚本派上用场。
  • .Net 类 [System.Security.Principal.WindowsIdentity] 有一些有趣的属性。 [System.Security.Principal.WindowsIdentity]::GetCurrent().Name 将给我用户帐户,在这种情况下,它将是(或可以成为)特定帐户。不过还是在作弊。

标签: windows powershell batch-file scheduled-tasks


【解决方案1】:

Per @Alex K.:传递一个单独的参数来表示我们正在计划的上下文中运行正常工作。简单、可靠的技术,不需要您对第三方组件有任何了解——在我看来,我们称之为“胜利”而不是“作弊”。

如果您真的想要,您可以通过检查父进程的属性来检查您真正要问的内容——如果我们是从任务计划程序运行的。从 PowerShell 来说这是非常可行的,不知道普通的旧批处理文件:

$parentpid = (gwmi "win32_process where (ProcessId = $pid)").parentprocessid
$parentname = (gwmi "win32_process where (ProcessId = $parentpid)").name
if ($parentname -eq 'taskeng.exe') {
    "I think this is Task Scheduler, or maybe something else a hacker named taskeng.exe, who knows?"
} else {
    "This is not Task Scheduler. Probably."
}

当然,如果有一天 MS 重命名进程,或者确实如果您想使用 TS 以外的其他东西来自动运行脚本,或者即使脚本调用另一个进程,而该进程又调用脚本,这可能会中断。

就个人而言,我肯定会选择显式标志。如果您忘记应用它,这很明显,它不可能有一天突然中断,而且最重要的是,您可以测试您的脚本是否正常工作,而无需先实际安排它。

【讨论】:

  • 太棒了!我完全同意胜利/作弊 - 它只是作为问题的答案,而不是作为解决问题的可靠方法。
  • 存档说明:不幸的是,此方法没有将“taskeng.exe”作为父级,而是“svchost.exe”,这可能比 taskeng 更没用。但是,它确实将用户调用的运行与计划的运行区分开来。 (感谢@Jeroen,对于手头的问题,我将坚持使用“单独的参数” - 方法,尽管这种“检查调用堆栈”是我想学习的。)
  • @perostb:我在 Windows 7 上使用用户计划的任务进行了测试,其中父进程是“taskeng.exe”。但是,正如我所提到的,这很脆弱,因为不能保证确实如此。
猜你喜欢
  • 2016-07-15
  • 2018-06-10
  • 2012-01-29
  • 2020-12-27
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2014-06-11
相关资源
最近更新 更多