当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 当特定程序在 Windows 中打开/关闭时运行脚本(程序)

作者:精品下载站 日期:2024-12-14 23:11:49 浏览:13 分类:玩电脑

当特定程序在 Windows 中打开/关闭时运行脚本(程序)


在本文中,我们将展示如何跟踪 Windows 中启动某个程序(进程)的事件并执行操作(运行脚本、命令、程序、发送电子邮件等)。例如,我们将跟踪 notepad.exe 进程的启动。当用户打开记事本时,Windows将自动运行特定的PowerShell脚本。

首先,在Windows上配置进程审核策略。您可以使用本地组策略编辑器在独立计算机上配置审核策略(

gpedit.msc

)。如果要在 AD 域中的计算机和服务器上配置策略,请使用组策略管理控制台 (

gpmc.msc

)。

  1. 进入计算机配置 -> Windows设置 -> 安全设置 -> 本地策略 -> 审核策略

  2. 打开审核流程跟踪属性并为成功事件启用它;

    [玩转系统] 当特定程序在 Windows 中打开/关闭时运行脚本(程序)

  3. 通过运行以下命令应用组策略设置:

    gpupdate /force

现在,当在 Windows 中启动任何进程时,会出现一个带有 EventID 4688 的事件(

A new process has been created

)将出现在事件查看器 -> Windows 日志 -> 安全中。该事件显示谁运行了该进程(帐户名称)、进程名称(新进程名称)以及父进程的名称(创建者进程名称)。

[玩转系统] 当特定程序在 Windows 中打开/关闭时运行脚本(程序)

您可以使用 PowerShell 按特定进程从事件日志中选择应用程序启动事件:

Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4688
} | Select-Object TimeCreated,@{name='NewProcessName';expression={ $_.Properties[5].Value }}, @{name='User';expression={ $_.Properties[1].Value }}|where-object {$_.NewProcessName -like “*notepad.exe*”}

结果,我们得到了用户在这台计算机上启动该程序的历史记录。

[玩转系统] 当特定程序在 Windows 中打开/关闭时运行脚本(程序)

然后在任务计划程序中创建一个新任务,该任务将在出现 EventID 4688 的事件时运行。

  1. 打开任务计划程序(

    taskschd.msc

    ) 并创建一个新任务 -> 创建任务;

  2. 提供任务名称并指定必须为所有用户运行该任务(运行任务时,使用以下用户帐户 -> BUILTIN\Users)。如果您使用 GPO 创建任务,请使用以下格式:

    %LogonDomain%\%LogonUser%

    ;

  3. 操作选项卡上,设置您要执行的操作。在此示例中,我将运行一个 PowerShell 脚本(调用

    powershell.exe

    具有属性:

    -ExecutionPolicy Bypass -file "C:\PS\ProcessRunEvent.ps1

    );

    [玩转系统] 当特定程序在 Windows 中打开/关闭时运行脚本(程序)

  4. 然后将该任务绑定到 Windows 事件。进入触发器选项卡,选择新建 -> 在事件上 -> 自定义 -> 新建事件过滤器

  5. 在下一个窗口中,指定以下事件过滤器选项:
    事件日志:

    Security

    事件编号:

    4688

    关键词:

    Audit Success

    [玩转系统] 当特定程序在 Windows 中打开/关闭时运行脚本(程序)

  6. 然后转到 XML 选项卡并启用手动编辑查询选项。通过将以下行添加到过滤器来编辑查询:

    and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]]
  7. 您将得到以下 XML 查询:

    <QueryList>
    <Query Id="0" Path="Security">
    <Select Path="Security">
    *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]]
    and
    *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]]
    </Select>
    </Query>
    </QueryList>
    

    [玩转系统] 当特定程序在 Windows 中打开/关闭时运行脚本(程序)

  8. 保存任务。

尝试运行notepad.exe。每次用户打开记事本时,您的 PowerShell 脚本都会自动运行。

例如,您可以使用 PowerShell 显示弹出通知或发送电子邮件。

[玩转系统] 当特定程序在 Windows 中打开/关闭时运行脚本(程序)

关闭特定应用程序后,有时您可能想运行备份脚本等。如果您想跟踪退出程序,请使用事件 ID 为 4689 的事件 —

A process has exited

之前我们展示了一个 PowerShell 脚本,用于在进程停止时自动重新启动进程。跟踪进程的运行/停止事件的解决方案更加优雅,并且不需要 PowerShell 脚本来监视正在运行的 Windows 进程。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯