Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

รันสคริปต์ (โปรแกรม) เมื่อโปรแกรมเฉพาะเปิด/ปิดใน Windows

ในบทความนี้ เราจะแสดงวิธีติดตามเหตุการณ์การเปิดโปรแกรมเฉพาะ (กระบวนการ) ใน Windows และดำเนินการ (รันสคริปต์, คำสั่ง, โปรแกรม, ส่งอีเมล ฯลฯ) ตัวอย่างเช่น เราจะติดตามการเปิดกระบวนการ notepad.exe และเมื่อผู้ใช้เปิด Notepad Windows จะรันสคริปต์ PowerShell เฉพาะโดยอัตโนมัติ

ขั้นแรก กำหนดค่านโยบายการตรวจสอบกระบวนการบน Windows คุณสามารถกำหนดค่านโยบายการตรวจสอบบนคอมพิวเตอร์แบบสแตนด์อโลนโดยใช้ Local Group Policy Editor (gpedit.msc) หากคุณต้องการกำหนดค่านโยบายบนคอมพิวเตอร์และเซิร์ฟเวอร์ในโดเมน AD ให้ใช้คอนโซลจัดการ Group Policy (gpmc.msc)

  1. ไปที่ Computer Configuration → Windows Settings → Security Settings → Local Policies → Audit Policy
  2. เปิดคุณสมบัติ Audit process tracking และเปิดใช้งานสำหรับเหตุการณ์ Success
  3. นำการตั้งค่า Group Policy ไปใช้โดยรัน: gpupdate /force

ตอนนี้ เมื่อเริ่มกระบวนการใดๆ ใน Windows เหตุการณ์ที่มี EventID 4688 (A new process has been created) จะปรากฏใน Event Viewer → Windows Logs → Security เหตุการณ์แสดงว่าใครรันกระบวนการ (Account name) ชื่อกระบวนการ (New Process Name) และชื่อกระบวนการผู้สร้าง (Creator Process Name)

คุณสามารถเลือกเหตุการณ์การเปิดแอปจาก Event Log โดยกระบวนการเฉพาะโดยใช้ 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*”}

ผลลัพธ์คือเราได้ประวัติการเปิดโปรแกรมโดยผู้ใช้บนคอมพิวเตอร์นี้

จากนั้นสร้างงานใหม่ใน Task Scheduler ที่จะรันหากมีเหตุการณ์ EventID 4688 ปรากฏ

  1. เปิด Task Scheduler (taskschd.msc) และสร้างงานใหม่ → Create Task
  2. ระบุชื่องาน และระบุว่าต้องรันสำหรับผู้ใช้ทุกคน (When running the task, use the following user account → BUILTIN\Users) หากสร้างงานด้วย GPO ให้ใช้รูปแบบนี้: %LogonDomain%\%LogonUser%
  3. บนแท็บ Actions ตั้งค่าการกระทำที่ต้องการดำเนินการ ในตัวอย่างนี้ ฉันจะรันสคริปต์ PowerShell (เรียก powershell.exe พร้อมแอตทริบิวต์: -ExecutionPolicy Bypass -file "C:\PS\ProcessRunEvent.ps1)
  4. จากนั้นผูกงานกับเหตุการณ์ Windows ไปที่แท็บ Triggers เลือก 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:\Windows\System32\notepad.exe')]]
  7. คุณจะได้ XML query ดังนี้:
    <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> 
  8. บันทึกงาน

ลองรัน notepad.exe ทุกครั้งที่ผู้ใช้เปิด Notepad สคริปต์ PowerShell ของคุณจะรันโดยอัตโนมัติ

ตัวอย่างเช่น คุณสามารถแสดงการแจ้งเตือนป๊อปอัปหรือส่งอีเมลโดยใช้ PowerShell

หลังจากปิดแอปเฉพาะ บางครั้งคุณอาจต้องการรันสคริปต์สำรอง ฯลฯ หากต้องการติดตามการออกจากโปรแกรม ให้ใช้เหตุการณ์ที่มี Event ID 4689 — A process has exited

เราเคยแสดงสคริปต์ PowerShell เพื่อรีสตาร์ทกระบวนการโดยอัตโนมัติหากหยุดทำงาน วิธีการติดตามเหตุการณ์การรัน/หยุดของกระบวนการนี้มีความสง่างามกว่าและไม่ต้องการสคริปต์ PowerShell เพื่อตรวจสอบกระบวนการ Windows ที่กำลังทำงาน