Как запустить скрипт (действие) при запуске (завершении) определенной программы в Windows?

В этой статье мы рассмотрим, как отследить событие запуска определённой программы (процесса) в Windows и выполнить какое-то действие (запустить скрипт, отправить email и т.д.). В качестве примера мы будем отслеживать запуск процесса notepad.exe , когда пользователь открывает эту программу, Windows автоматически запускает определенный PowerShell скрипт.

Прежде всего в Windows нужно настроить политику аудита процессов. На отдельном компьютере можно настроить политику аудита через редактор локальной GPO ( gpedit.msc ), если нужно настроить политику на компьютерах/серверах домена, воспользуйтесь доменным редактором gpmc.msc .

  1. Перейдите в раздел Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy ;
  2. Откройте свойства политики Audit process tracking , включите ее для событий Success .
  3. Обновите локальные политики : gpupdate /force

Теперь при запуске любого процесса в Windows в журнале Event Viewer -> Windows Logs -> Security будет появляться событие с EventID 4688 (A new process has been created). В событии указано, кто запустил процесс ( Account name ), имя процесса ( New Process Name ) и имя родительского процесса ( Creator Process Name ).

Вы можете сделать выборку событий запуска программы из журнала событий по определенному процессу с помощью PowerShell командлета Get-WinEvent :

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*”}

В результате мы получили таблицу с указанием пользователей, которые запускали определённую программу.

Теперь нужно создать задание планировщика, которое должно запускаться при появлении события 4688.

  1. Запустите Task Sheduler ( taskschd.msc ) и создайте новое задание -> Create Task ;
  2. Укажите имя задания и укажите, что оно должно запускаться для всех пользователей (When running the task, use the following user account -> BUILTINUsers ). Если вы создаете задание планировщика через GPO, используйте формат %LogonDomain%%LogonUser% ;
  3. На вкладке Actions задайте действие, которое вы хотите выполнить. В этом примере я запускаю PowerShell скрипт (вызываем программу powershell.exe с атрибутами -ExecutionPolicy Bypass -file "C:PSProcessRun.ps1 »
  4. Теперь нужно привязать задание планировщика к событию Windows. Перейдите на вкладку Trigger -> New -> On an event -> Custom -> New Event Filter ;
  5. В открывшемся окне нужно указать следующие параметры фильтра событий:Event logs: Security
    Event ID: 4688
    Keywords: Audit Success
  6. Теперь перейдите на вкладку XML и включите опцию Edit query manually . Отредактируйте запрос, добавив в фильтр строку: and *[EventData[Data[@Name='NewProcessName'] and (Data='C:WindowsSystem32notepad.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:WindowsSystem32notepad.exe')]]
    </Select>
    </Query>
    </QueryList>

  8. Сохраните задание планировщика.

Попробуйте теперь запустить процесс notepad.exe. Теперь каждый раз, когда пользователь запускает блокнот, выполняется ваш PowerShell скрипт.

В этом примере я через PowerShell вывожу всплывающее уведомление Windows . Вы можете использовать любой другой PowerShell скрипт — например отправку письма , что угодно.

Если вам нужно отслеживать завершение какой-то программы, используйте Event ID 4689 — A process has exited. После завершения программы иногда бывает нужно запустить скрипт резервного копирования и т.д.

Ранее мы рассматривали PowerShell скрипт для автоматического перезапуска процесса в случае его остановки. Решение с отслеживанием события запуска/остановки процессов более элегантное и не требует наличия запущенного скрипта PowerShell для мониторинга работающих процессов .

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago