Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Chạy Tập lệnh (Chương trình) khi một chương trình cụ thể mở / đóng trong Windows

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

Trước hết, hãy cấu hình chính sách kiểm tra quy trình trên Windows. Bạn có thể định cấu hình chính sách kiểm tra trên một máy tính độc lập bằng cách sử dụng Local Group Policy Editor ( gpedit.msc ). Nếu bạn muốn định cấu hình chính sách trên máy tính và máy chủ trong miền AD của mình, hãy sử dụng bảng điều khiển Quản lý Chính sách Nhóm ( gpmc.msc ).

  1. Đi tới Cấu hình máy tính -> Cài đặt Windows -> Cài đặt bảo mật -> Chính sách địa phương -> Chính sách kiểm tra ;
  2. Mở Theo dõi quá trình kiểm tra và kích hoạt nó để Thành công sự kiện; Chạy Tập lệnh (Chương trình) khi một chương trình cụ thể mở / đóng trong Windows
  3. Áp dụng cài đặt Chính sách Nhóm bằng cách chạy: gpupdate / force

Bây giờ, khi bắt đầu bất kỳ quy trình nào trong Windows, một sự kiện với EventID 4688 ( Một quy trình mới đã được tạo ) sẽ xuất hiện trong Trình xem sự kiện -> Nhật ký Windows -> Bảo mật. Sự kiện cho biết ai đã chạy quy trình ( Tên tài khoản ), tên của quy trình ( Tên quy trình mới ) và tên của quy trình mẹ ( Tên quy trình của người tạo ).

Chạy Tập lệnh (Chương trình) khi một chương trình cụ thể mở / đóng trong Windows

Bạn có thể chọn các sự kiện khởi chạy ứng dụng từ Nhật ký sự kiện theo quy trình cụ thể bằng PowerShell:

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

Do đó, chúng tôi có lịch sử khởi chạy chương trình của người dùng trên máy tính này.

Chạy Tập lệnh (Chương trình) khi một chương trình cụ thể mở / đóng trong Windows

Sau đó, tạo một nhiệm vụ mới trong Bộ lập lịch tác vụ sẽ chạy nếu một sự kiện có EventID 4688 xuất hiện.

  1. Mở Trình lập lịch tác vụ ( taskchd.msc ) và tạo một công việc mới -> Tạo công việc ;
  2. Cung cấp tên tác vụ và chỉ định rằng nó phải được chạy cho tất cả người dùng (Khi chạy tác vụ, hãy sử dụng tài khoản người dùng sau -> BUILTIN \ Users ). Nếu bạn tạo tác vụ bằng GPO, hãy sử dụng định dạng sau:% LogonDomain% \% LogonUser% ;
  3. Trên Hành động , đặt hành động bạn muốn thực hiện. Trong ví dụ này, tôi sẽ chạy một tập lệnh PowerShell (gọi powershell.exe với các thuộc tính: -ExecutionPolicy Bypass -file "C:\ PS \ ProcessRunEvent.ps1 ); Chạy Tập lệnh (Chương trình) khi một chương trình cụ thể mở / đóng trong Windows
  4. Sau đó, liên kết nhiệm vụ với một sự kiện Windows. Đi tới Trình kích hoạt , chọn Mới -> Trong một sự kiện -> Tùy chỉnh -> Bộ lọc sự kiện mới ;
  5. Trong cửa sổ tiếp theo, chỉ định các tùy chọn bộ lọc sự kiện sau:
    Nhật ký sự kiện: Bảo mật ID sự kiện
    : 4688 Từ khóa
    : Kiểm tra Thành công
    Chạy Tập lệnh (Chương trình) khi một chương trình cụ thể mở / đóng trong Windows
  6. Sau đó, chuyển đến XML và bật tab Chỉnh sửa truy vấn theo cách thủ công Lựa chọn. Chỉnh sửa truy vấn bằng cách thêm dòng sau vào bộ lọc: và * [EventData [Data [@ Name ='NewProcessName'] và (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 Tập lệnh (Chương trình) khi một chương trình cụ thể mở / đóng trong Windows

  8. Lưu công việc.

Cố gắng chạy notepad.exe. Mỗi lần người dùng mở Notepad, tập lệnh PowerShell của bạn sẽ tự động chạy.

Ví dụ:bạn có thể hiển thị thông báo bật lên hoặc gửi email bằng PowerShell.

Chạy Tập lệnh (Chương trình) khi một 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 tập lệnh dự phòng, v.v. Nếu bạn muốn theo dõi việc thoát khỏi một chương trình, hãy sử dụng sự kiện với ID sự kiện 4689 - Một quá trình đã thoát .

Trước đó, chúng tôi đã giới thiệu một tập lệnh PowerShell để tự động khởi động lại quá trình nếu nó dừng lại. Giải pháp theo dõi sự kiện chạy / dừng của một quy trình thanh lịch hơn và không yêu cầu tập lệnh PowerShell để giám sát các quy trình Windows đang chạy.