安排任务以监控某个流程的启动

时间:2015-10-29 19:38:32

标签: windows powershell events wmi wmi-query

我试图将两个应用程序绑在一起,这样当一个应用程序启动时,另一个应用程序也会启动。

我希望在事件>下的任务计划程序中找到它。应用程序或类似的东西,但只有一些应用程序在那里有事件源。

所以我研究并发现你可以通过注册WMI事件来检测进程。

Register-WMIEvent -Query "SELECT * FROM __InstanceCreationEvent WITHIN 3 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'" -sourceIdentifier 'NotepadStarted' -action {if(!(ps AutoHotKey)) { start Automator.ahk}}

但是这意味着要一直运行,这意味着后台有一个powershell.exe进程,WMI每3秒轮询一次(WITHIN 3 - 是的,我确实需要它尽快响应)。 PC功能足以胜任这项工作,但如果将来我想观看多个应用程序,这种方法可能会占用太多资源。

有没有更好的方法来监视Windows上的进程启动?没有在后台连续轮询或运行脚本,而是简单地安排任务来响应记事本已启动的事件?

1 个答案:

答案 0 :(得分:3)

我找到了一种通过审计的方法,这似乎没有问题。 我们正在尝试让事件在启动时引发事件,然后在任务调度程序中将事件作为我们行动的触发器。

LATER EDIT:好的确会产生一些误报。如果程序没有实际执行,则操作可能会触发。所以要小心,正在进行中。

转到application.exe,右键点击>属性>安全选项卡>进展>审核标签>修改

添加您的用户名并勾选遍历文件夹/执行文件。单击所有确定。 application.exe的每次成功执行现在都将显示在事件查看器中。去那里检查一下:

事件查看器> Windows日志>安全 您可以过滤EventID 4663的当前日志

以下是来自我的机器的事件:

尝试访问对象。

Subject:
  Security ID:    PC\Redacted
  Account Name:   Redacted
  Account Domain:   PC
  Logon ID:   0xxxxxxx

Object:
  Object Server:  Security
  Object Type:  File
  Object Name:  C:\Program Files\Some Application\application.exe
  Handle ID:  0x1e1c

Process Information:
  Process ID: 0x374
  Process Name: C:\Windows\explorer.exe

Access Request Information:
  Accesses: Execute/Traverse

  Access Mask:  0x20

你会看到不止一个,它不只是一对一,1个程序开始= 1个事件。还有手柄已打开,手柄已关闭事件 在任务计划程序中,您现在必须创建一个事件来定位程序的开始。

创建新任务>触发标签>新

从下拉列表中选择开始任务:在事件

点击自定义单选按钮,然后点击编辑事件过滤器按钮

XML 标签中,勾选手动编辑查询并粘贴以下内容:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[EventData[Data[@Name='ObjectName'] and (Data='C:\Program Files\Some Application\application.exe')]]
  </Select>
  </Query>
</QueryList>

¹
Quick Development Tips: How to monitor a folder and trigger an action for incoming files, in Windows 7

上的图片和更多详情

完成此操作后,剩下的就是设置操作,即application.exe启动时要运行的程序。对我来说这是一个AutoHotKey脚本 - 我只需点击浏览并导航到它。

现在,当我启动应用程序时,我得到AutoHotKey脚本自动执行一些初始步骤。它不会只是创建一个包含application.exe & script.ahk的批处理文件,因为有时应用程序从打开文件开始,有时它是由其他东西启动的,或者谁知道。这种方式无论如何开始,都会发生script.ahk。

¹旁注:这是一个问题。此XPath查询适用于Data='C:\no\wildcards\allowed.exe',但您会发现自己can't use wildcards or any other kind of matching感到失望。因此,如果您想选择一个不移动或更改名称的文件,那很好。但是如果你想在你正在观看的文件夹中选择一个新创建的未知名称文件 - 你不能。最多可以Data='variant1' OR Data='variant2'...