Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Chạy Script (Chương trình) Khi Chương trình Cụ thể Mở/Đóng trong Windows

Trong bài viết này, chúng tôi sẽ trình bày cách theo dõi sự kiện khởi chạy một chương trình (tiến trình) cụ thể trong Windows và thực hiện hành động (chạy script, lệnh, chương trình, gửi email, v.v.). Là ví dụ, chúng ta sẽ theo dõi khởi chạy tiến trình notepad.exe. Và khi người dùng mở Notepad, Windows sẽ tự động chạy một script PowerShell cụ thể.

Trước hết, cấu hình chính sách audit tiến trình trên Windows. Bạn có thể cấu hình audit policy trên máy độc lập bằng Local Group Policy Editor (gpedit.msc). Nếu bạn muốn cấu hình chính sách trên máy tính và server trong domain AD, dùng console Group Policy Management (gpmc.msc).

  1. Đi đến Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy;
  2. Mở thuộc tính Audit process tracking và bật nó cho sự kiện Success;Chạy Script (Chương trình) Khi Chương trình Cụ thể Mở/Đóng trong Windows
  3. Áp dụng cài đặt Group Policy bằng lệnh: gpupdate /force

Bây giờ, khi khởi động bất kỳ tiến trình nào trong Windows, sự kiện với EventID 4688 (A new process has been created) sẽ xuất hiện trong Event Viewer -> Windows Logs -> Security. Sự kiện cho thấy ai đã chạy tiến trình (Account name), tên tiến trình (New Process Name), và tên tiến trình cha (Creator Process Name).

Chạy Script (Chương trình) Khi Chương trình Cụ thể Mở/Đóng trong Windows

Bạn có thể chọn sự kiện khởi chạy ứng dụng từ Event Log theo tiến trình cụ thể bằng 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*”}

Kết quả, chúng ta có lịch sử chạy chương trình bởi user trên máy tính này.

Chạy Script (Chương trình) Khi Chương trình Cụ thể Mở/Đóng trong Windows

Sau đó tạo tác vụ mới trong Task Scheduler sẽ chạy nếu sự kiện với EventID 4688 xuất hiện.

  1. Mở Task Scheduler (taskschd.msc) và tạo tác vụ mới -> Create Task;
  2. Đặt tên tác vụ và chỉ định nó phải chạy cho tất cả user (When running the task, use the following user account -> BUILTIN\Users). Nếu tạo tác vụ bằng GPO, dùng định dạng: %LogonDomain%\%LogonUser%;
  3. Trên tab Actions, đặt hành động bạn muốn thực hiện. Trong ví dụ này, tôi sẽ chạy script PowerShell (gọi powershell.exe với tham số: -ExecutionPolicy Bypass -file "C:\PS\ProcessRunEvent.ps1); Chạy Script (Chương trình) Khi Chương trình Cụ thể Mở/Đóng trong Windows
  4. Sau đó gắn tác vụ với sự kiện Windows. Đi đến tab Triggers, chọn New -> On an event -> Custom -> New Event Filter;
  5. Trong cửa sổ tiếp theo, chỉ định các tùy chọn bộ lọc sự kiện:
    Event logs: Security
    Event ID: 4688
    Keywords: Audit Success
    Chạy Script (Chương trình) Khi Chương trình Cụ thể Mở/Đóng trong Windows
  6. Sau đó đi đến tab XML và bật tùy chọn Edit query manually. Chỉnh sửa truy vấn bằng cách thêm dòng sau vào bộ lọc: and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]]
  7. Bạn sẽ nhận được truy vấn XML sau:
    <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> 

    Chạy Script (Chương trình) Khi Chương trình Cụ thể Mở/Đóng trong Windows

  8. Lưu tác vụ.

Thử chạy notepad.exe. Mỗi khi user mở Notepad, script PowerShell của bạn sẽ tự động chạy.

Ví dụ, bạn có thể hiển thị thông báo popup hoặc gửi email bằng PowerShell.

Chạy Script (Chương trình) Khi Chương trình Cụ thể Mở/Đóng trong Windows

Sau khi đóng ứng dụng cụ thể, đôi khi bạn có thể muốn chạy script backup, v.v. Nếu bạn muốn theo dõi thoát chương trình, dùng sự kiện với Event ID 4689 — A process has exited.

Trước đây chúng tôi đã trình bày script PowerShell tự động khởi động lại tiến trình nếu nó dừng. Giải pháp theo dõi sự kiện chạy/dừng tiến trình tinh tế hơn và không yêu cầu script PowerShell giám sát tiến trình Windows đang chạy.