Microsoft .NET Framework 개체에서 생성한 이벤트에 가입합니다.
구문
Register-ObjectEvent [-InputObject] <psobject> [-EventName] <string> [[-SourceIdentifier] <string>] [[-Action] <scriptblock>] [-Forward] [-MessageData <psobject>] [-SupportEvent] [<CommonParameters>]
설명
Register-ObjectEvent cmdlet은 로컬 컴퓨터 또는 원격 컴퓨터의 .NET Framework 개체에서 생성된 이벤트에 가입합니다.
가입된 이벤트가 발생하면 세션의 이벤트 큐에 추가됩니다. 이벤트 큐의 이벤트를 가져오려면 Get-Event cmdlet을 사용합니다.
Register-ObjectEvent의 매개 변수를 사용하여 큐의 이벤트를 식별하는 데 사용할 수 있는 이벤트의 속성 값을 지정할 수 있습니다. 또한 Action 매개 변수를 사용하여 가입된 이벤트가 발생할 때 수행할 작업을 지정하고, Forward 매개 변수를 사용하여 원격 이벤트를 로컬 세션의 이벤트 큐로 보낼 수 있습니다.
이벤트에 가입하면 이벤트 가입자가 세션에 추가됩니다. 세션의 이벤트 가입자를 가져오려면 Get-EventSubscriber cmdlet을 사용합니다. 가입을 취소하려면 Unregister-Event cmdlet을 사용하여 세션에서 이벤트 가입자를 삭제합니다.
매개 변수
-Action <scriptblock>
이벤트를 처리할 명령을 지정합니다. 이벤트가 발생하면 해당 이벤트를 이벤트 큐로 보내는 대신 Action에 있는 명령이 실행됩니다. 명령을 중괄호( { } )로 묶어 스크립트 블록을 만듭니다.
Action 매개 변수의 값은 이벤트에 대한 정보를 Action 스크립트 블록에 제공하는 $Event, $EventSubscriber, $Sender, $SourceEventArgs 및 $SourceArgs 자동 변수를 포함할 수 있습니다. 자세한 내용은 about_Automatic_Variables를 참조하십시오.
작업을 지정하면 Register-ObjectEvent가 해당 작업을 나타내는 이벤트 작업 개체를 반환합니다. Job cmdlet을 사용하여 이벤트 작업을 관리할 수 있습니다.
필수 여부 |
false |
위치 |
102 |
기본값 |
None. |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-EventName <string>
가입할 이벤트를 지정합니다. 이벤트 이름을 입력합니다. 이 매개 변수는 필수 사항입니다.
이 매개 변수의 값은 이벤트 가입에 대해 선택하는 이름이 아니라 .NET Framework 개체가 표시하는 이벤트의 이름입니다. 예를 들어 ManagementEventWatcher 클래스에는 "EventArrived" 및 "Stopped"라는 이벤트가 있습니다. 이벤트의 이벤트 이름을 찾으려면 Get-Member cmdlet을 사용합니다.
필수 여부 |
true |
위치 |
2 |
기본값 |
없음 |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-Forward
이 가입에 대한 이벤트를 원격 세션으로 보냅니다. 원격 컴퓨터 또는 원격 세션에서 이벤트를 등록해야 하는 경우 이 매개 변수를 사용합니다.
필수 여부 |
false |
위치 |
named |
기본값 |
False |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-InputObject <psobject>
이벤트를 생성하는 .NET Framework 개체를 지정합니다. 개체가 포함된 변수를 입력하거나 개체를 가져오는 명령 또는 식을 입력하십시오. 이 매개 변수는 필수 사항입니다.
필수 여부 |
true |
위치 |
1 |
기본값 |
없음 |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-MessageData <psobject>
이 이벤트 가입과 연결할 추가 데이터를 지정합니다. 이 매개 변수의 값은 이 가입과 연결된 모든 이벤트의 MessageData 속성에 나타납니다.
필수 여부 |
false |
위치 |
named |
기본값 |
없음 |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-SourceIdentifier <string>
가입에 대해 선택한 이름을 지정합니다. 선택한 이름은 현재 세션에서 고유해야 합니다. 기본값은 Windows PowerShell이 할당하는 GUID입니다.
이 매개 변수의 값은 가입자 개체 및 이 가입과 연결된 모든 이벤트 개체의 SourceIdentifier 속성의 값에 나타납니다.
필수 여부 |
false |
위치 |
101 |
기본값 |
GUID |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
-SupportEvent
이벤트 가입을 숨깁니다. 현재 가입이 더욱 복잡한 이벤트 등록 메커니즘의 일부이고 독립적으로 검색되지 않아야 하는 경우 이 매개 변수를 사용합니다.
SupportEvent 매개 변수를 사용하여 만들어진 가입을 보거나 취소하려면 Get-EventSubscriber 및 Unregister-Event cmdlet의 Force 매개 변수를 사용합니다.
필수 여부 |
false |
위치 |
named |
기본값 |
False |
파이프라인 입력 적용 여부 |
false |
와일드카드 문자 적용 여부 |
false |
<CommonParameters>
이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_Commonparameters.
입력 및 출력
입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.
입력 |
없음 개체를 Register-ObjectEvent로 파이프할 수 없습니다. |
출력 |
없음 이 cmdlet은 어떠한 출력도 생성하지 않습니다. |
참고
이벤트, 이벤트 가입 및 이벤트 큐는 현재 세션에서만 존재합니다. 현재 세션을 닫으면 이벤트 큐가 삭제되고 이벤트 가입이 취소됩니다.
예 1
C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived" 설명 ----------- 이 예에서는 새 프로세스가 시작될 때 생성되는 이벤트에 가입합니다. 명령은 ManagementEventWatcher 개체를 사용하여 EventArrived 이벤트를 가져옵니다. 쿼리 개체는 이벤트가 Win32_Process 클래스에 대한 인스턴스 작성 이벤트임을 지정합니다.
예 2
C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query C:\PS> $action = { New-Event "PowerShell.ProcessCreated" -Sender $sender -EventArguments $SourceEventArgs.NewEvent.TargetInstance } C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived" -action $action Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 422cfe5a-65e... Running True New-Event "PowerShe... 설명 ----------- 이 예에서는 이벤트에 응답하는 작업을 지정하는 방법을 보여 줍니다. 작업을 지정하면 발생한 이벤트가 이벤트 큐에 추가되지 않습니다. 대신 작업이 이벤트에 응답합니다. 이 예에서 새 프로세스가 시작되었음을 나타내는 인스턴스 작성 이벤트가 발생하면 새 ProcessCreated 이벤트가 발생합니다. 작업은 이벤트 작업에 대해서만 채워지는 $Sender 및 $SourceEventArgs 자동 변수를 사용합니다. Register-ObjectEvent 명령은 작업을 나타내는 작업 개체를 반환합니다. 이 작업은 백그라운드 작업으로 실행됩니다. Get-Job 및 Receive-Job과 같은 Job cmdlet을 사용하여 백그라운드 작업을 관리할 수 있습니다. 자세한 내용은 about_Jobs를 참조하십시오.
예 3
C:\PS>$s = new-pssession -computername Server01, Server02 C:\PS> invoke-command -session $s -filepath ProcessCreationEvent.ps1 C:\PS> invoke-command -session $s { get-event } # ProcessCreationEvent.ps1 function Enable-ProcessCreationEvent { $query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", ` (New-Object TimeSpan 0,0,1), ` "TargetInstance isa 'Win32_Process'" $processWatcher = New-Object System.Management.ManagementEventWatcher $query $identifier = "WMI.ProcessCreated" Register-ObjectEvent -input $processWatcher -eventName "EventArrived" ` -sourceIdentifier $identifier -messageData "Test" -forward } } EnableProcessCreationEvent 설명 ----------- 이 예에서는 원격 컴퓨터의 개체 이벤트에 가입하는 방법을 보여 줍니다. 첫 번째 명령은 두 원격 컴퓨터에 PSSession을 만든 다음 $s 변수에 저장합니다. 두 번째 명령은 Invoke-Command cmdlet의 FilePath 매개 변수를 사용하여 $s의 각 PSSession에서 ProcessCreationEvent.ps1 스크립트를 실행합니다. 이 스크립트에는 ManagementEventWatcher 개체 및 해당 EventArrived 이벤트를 통해 Win32_Process 개체의 인스턴스 작성 이벤트에 가입하는 Register-ObjectEvent 명령이 포함되어 있습니다.
예 4
C:\PS>$timer = New-Object Timers.Timer C:\PS> $timer.Interval = 500 C:\PS> $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed -sourceIdentifier Timer.Random -Action {$random = Get-Random -Min 0 -Max 100} C:\PS> $job.gettype().fullname System.Management.Automation.PSEventJob C:\PS> $job | format-list -property * State : Running Module : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 StatusMessage : HasMoreData : True Location : Command : $random = Get-Random -Min 0 -Max 100 JobStateInfo : Running Finished : System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 Id : 1 Name : Timer.Random ChildJobs : {} ... C:\PS> $timer.Enabled = $true C:\PS> & $job.module {$random} 60 C:\PS> & $job.module {$random} 47 설명 ----------- 이 예에서는 이벤트 등록에 Action을 포함할 때 만든 PSEventJob 개체의 동적 모듈을 사용하는 방법을 보여 줍니다. 첫 번째 명령은 New-Object cmdlet을 사용하여 타이머 개체를 만들고 두 번째 명령은 타이머 간격을 500(밀리초)으로 설정합니다. 세 번째 명령은 Register-ObjectEvent cmdlet을 사용하여 타이머 개체의 Elapsed 이벤트를 등록합니다. 이 명령에는 이벤트를 처리하는 작업이 포함됩니다. 타이머 간격이 경과할 때마다 이벤트가 발생하고 작업의 명령이 실행됩니다. 이 경우 Get-Random cmdlet은 0부터 100 사이의 임의의 숫자를 생성하여 $random 변수에 저장합니다. Register-ObjectEvent 명령에서 Action 매개 변수를 사용할 경우 명령은 작업을 나타내는 PSEventJob 개체를 반환합니다. 이 명령은 해당 작업 개체를 $job 변수에 저장합니다. Register-ObjectEvent cmdlet이 반환하는 PSEventJob 개체는 이벤트 가입자의 Action 속성에서도 사용할 수 있습니다. 자세한 내용은 Get-EventSubscriber를 참조하십시오. 네 번째 명령은 $job 변수에 PSEventJob 개체가 포함되어 있음을 보여 줍니다. 다섯 번째 명령은 Format-List cmdlet을 사용하여 PSEventJob 개체의 모든 속성을 목록으로 표시합니다. PSEventJob에 작업을 구현하는 동적 스크립트 모듈이 포함된 Module 속성이 있습니다. 여섯 번째 명령은 타이머를 설정합니다. 나머지 명령은 호출 연산자(&)를 사용하여 모듈의 명령을 호출하고 $random 변수 값을 표시합니다. 호출 연산자를 사용하면 내보내지 않은 명령을 포함하여 모듈의 어떠한 명령도 호출할 수 있습니다. 이 경우 명령에는 Elapsed 이벤트가 발생할 때 생성된 임의의 숫자가 표시됩니다. 모듈에 대한 자세한 내용은 about_Modules를 참조하십시오.
참고 항목