【发布时间】:2018-08-21 23:22:03
【问题描述】:
我可以通过以下方式确定正在运行的任务:
$TaskService = new-object -ComObject('Schedule.Service')
$TaskService.connect()
$TaskFolder = $TaskService.GetFolder('\')
$TaskFolder.gettasks(1) | ? {$_.state -eq 4}
如果这些任务与其他现有进程启动相同的程序(即进程名称),是否有任何方法可以识别这些任务的进程 ID?
我的目标是从计划任务启动的 PowerShell 脚本,该脚本可以识别它在哪个计划任务下运行。我可以使用$PID 轻松确定 PoSh 进程 ID,但我不知道如何将其链接到特定的计划任务。
谢谢。
【问题讨论】:
-
我会更改脚本和任务,以便他们启动带有识别触发器参数的脚本...
-
您可以在脚本中添加一个参数,您可以指定哪个任务启动它?像
-StartedFrom SchedTask1这样简单的东西 -
命令行参数似乎是解决您问题的更好方法。也就是说,获取任务的 PID 并不难。对于所有正在运行的任务的列表,task service interface 有一个
GetRunningTasks方法。 OTOH,对于特定文件夹,遍历任务并在每个任务上调用GetInstances。无论哪种情况,您都会获得一组正在运行的任务。正在运行的任务具有其Name、Path、CurrentAction和EnginePID的属性。后者是运行任务的进程的 PID。 -
@eryksun 这是一个答案。你应该这样写。
-
$TaskService.GetRunningTasks(0)将根据eryksun 显示您有权查看的所有内容
标签: windows powershell scheduled-tasks taskscheduler