Как запустить скрипт (действие) при запуске (завершении) определенной программы в Windows?
Как запустить скрипт (действие) при запуске (завершении) определенной программы в Windows?
В этой статье рассмотрено, как отследить событие запуска определённой программы (процесса) в Windows и выполнить какое-то действие (запустить скрипт, отправить email и т.д.). В качестве примера будем отслеживать запуск процесса notepad.exe , когда пользователь открывает эту программу, Windows автоматически запускает определенный PowerShell скрипт.
Прежде всего в Windows нужно настроить политику аудита процессов. На отдельном компьютере можно настроить политику аудита через редактор локальной GPO ( gpedit.msc ), если нужно настроить политику на компьютерах/серверах домена, воспользуйтесь доменным редактором gpmc.msc .
- Перейдите в раздел Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy;
- Откройте свойства политики Audit process tracking, включите ее для событий Success.
- Обновите локальные политики: gpupdate /force
Теперь при запуске любого процесса в Windows в журнале Event Viewer -> Windows Logs -> Security будет появляться событие с EventID 4688 (A new process has been created). В событии указано, кто запустил процесс ( Account name ), имя процесса ( New Process Name ) и имя родительского процесса ( Creator Process Name ).
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.
- Запустите Task Sheduler ( taskschd.msc ) и создайте новое задание -> Create Task;
- Укажите имя задания и укажите, что оно должно запускаться для всех пользователей (When running the task, use the following user account -> BUILTIN\Users). Если вы создаете задание планировщика через GPO, используйте формат %LogonDomain%\%LogonUser% ;
- На вкладке Actions задайте действие, которое вы хотите выполнить. В этом примере запускается PowerShell скрипт (вызываем программу powershell.exe с атрибутами -ExecutionPolicy Bypass -file "C:\PS\ProcessRun.ps1 »
- Теперь нужно привязать задание планировщика к событию Windows. Перейдите на вкладку Trigger -> New -> On an event -> Custom -> New Event Filter;
- В открывшемся окне нужно указать следующие параметры фильтра событий:Event logs: Security
Event ID: 4688
Keywords: Audit Success - Теперь перейдите на вкладку XML и включите опцию Edit query manually. Отредактируйте запрос, добавив в фильтр строку: and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]]
- Должен получится такой 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> - Сохраните задание планировщика.
Попробуйте теперь запустить процесс notepad.exe. Теперь каждый раз, когда пользователь запускает блокнот, выполняется ваш PowerShell скрипт.
В этом примере через PowerShell выводится всплывающее уведомление Windows. Вы можете использовать любой другой PowerShell скрипт — например отправку письма, что угодно.