Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Windows에서 특정 프로그램이 열리거나 닫힐 때 스크립트(프로그램) 자동 실행하는 방법

이 글에서는 Windows에서 특정 프로그램(프로세스)의 실행 이벤트를 감지하고, 해당 시점에 원하는 동작(스크립트 실행, 명령어 실행, 프로그램 실행, 이메일 전송 등)을 자동으로 수행하는 방법을 소개합니다. 예시로 notepad.exe 프로세스의 실행을 추적하여, 사용자가 메모장을 열면 Windows가 자동으로 지정된 PowerShell 스크립트를 실행하도록 구성해 보겠습니다.

1단계: 프로세스 감사 정책 구성

가장 먼저 Windows에서 프로세스 감사 정책을 구성해야 합니다. 단독 컴퓨터에서는 로컬 그룹 정책 편집기(gpedit.msc)를 사용하고, AD 도메인에 속한 컴퓨터나 서버에 정책을 적용하려면 그룹 정책 관리 콘솔(gpmc.msc)을 사용하세요.

  1. 컴퓨터 구성(Computer Configuration)Windows 설정보안 설정로컬 정책감사 정책으로 이동합니다.
  2. 프로세스 추적 감사(Audit process tracking) 속성을 열어 성공(Success) 이벤트에 대해 활성화합니다. Windows에서 특정 프로그램이 열리거나 닫힐 때 스크립트(프로그램) 자동 실행하는 방법
  3. gpupdate /force 명령을 실행하여 그룹 정책 설정을 즉시 적용합니다.

2단계: 프로세스 실행 이벤트 확인

설정이 완료되면 Windows에서 프로세스가 시작될 때마다 이벤트 뷰어 → Windows 로그 → 보안 로그에 EventID 4688(새 프로세스가 생성되었습니다) 이벤트가 기록됩니다. 이 이벤트에는 프로세스를 실행한 계정(계정 이름), 실행된 프로세스 이름(새 프로세스 이름), 부모 프로세스 이름(생성자 프로세스 이름)이 함께 기록됩니다.

Windows에서 특정 프로그램이 열리거나 닫힐 때 스크립트(프로그램) 자동 실행하는 방법

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

이 명령을 실행하면 해당 컴퓨터에서 사용자들이 프로그램을 실행한 전체 기록을 확인할 수 있습니다.

Windows에서 특정 프로그램이 열리거나 닫힐 때 스크립트(프로그램) 자동 실행하는 방법

3단계: 작업 스케줄러에 이벤트 기반 작업 생성

이제 EventID 4688 이벤트가 발생할 때 자동으로 실행되는 새 작업을 작업 스케줄러에 만들어 보겠습니다.

  1. 작업 스케줄러(taskschd.msc)를 열고 작업 만들기(Create Task)를 선택해 새 작업을 생성합니다.
  2. 작업 이름을 지정하고 모든 사용자에 대해 실행되도록 설정합니다(작업 실행 시 다음 사용자 계정 사용 → BUILTIN\Users). GPO를 통해 작업을 배포하는 경우 %LogonDomain%\%LogonUser% 형식을 사용하세요.
  3. 동작(Actions) 탭에서 수행할 작업을 지정합니다. 이 예제에서는 PowerShell 스크립트를 실행하도록 powershell.exe를 다음 인수와 함께 호출합니다: -ExecutionPolicy Bypass -file "C:\PS\ProcessRunEvent.ps1" Windows에서 특정 프로그램이 열리거나 닫힐 때 스크립트(프로그램) 자동 실행하는 방법
  4. 트리거(Triggers) 탭으로 이동한 뒤 새로 만들기이벤트 시(On an event)사용자 지정새 이벤트 필터를 차례로 선택합니다.
  5. 이벤트 필터 옵션을 다음과 같이 지정합니다:
    이벤트 로그: Security
    이벤트 ID: 4688
    키워드: 감사 성공(Audit Success)
    Windows에서 특정 프로그램이 열리거나 닫힐 때 스크립트(프로그램) 자동 실행하는 방법
  6. XML 탭으로 이동하여 쿼리 수동 편집 옵션을 활성화한 후, 필터에 다음 줄을 추가해 특정 프로세스만 대상으로 하도록 쿼리를 수정합니다: and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.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:\Windows\System32\notepad.exe')]]
</Select>
</Query>
</QueryList>

Windows에서 특정 프로그램이 열리거나 닫힐 때 스크립트(프로그램) 자동 실행하는 방법

작업을 저장합니다.

4단계: 동작 테스트 및 활용

이제 notepad.exe를 실행해 보세요. 사용자가 메모장을 열 때마다 지정한 PowerShell 스크립트가 자동으로 실행됩니다. 예를 들어 PowerShell을 활용해 팝업 알림을 표시하거나 이메일을 자동으로 발송하는 등의 동작을 구현할 수 있습니다.

Windows에서 특정 프로그램이 열리거나 닫힐 때 스크립트(프로그램) 자동 실행하는 방법

프로그램 종료 시점 추적하기

특정 앱이 종료된 후 백업 스크립트를 실행하는 등의 후속 작업이 필요한 경우가 있습니다. 프로그램 종료를 추적하려면 Event ID 4689(프로세스가 종료되었습니다) 이벤트를 사용하면 됩니다.

앞서 프로세스가 중지되면 자동으로 재시작하는 PowerShell 스크립트를 소개한 적이 있습니다. 하지만 프로세스의 실행/종료 이벤트를 추적하는 이 방식이 훨씬 더 깔끔하며, Windows 프로세스를 지속적으로 모니터링하는 별도의 PowerShell 스크립트가 필요 없다는 장점이 있습니다.