다음을 통해 공유


Register-ObjectEvent

Microsoft .NET Framework 개체에서 생성된 이벤트를 구독합니다.

구문

Default (기본값)

Register-ObjectEvent
    [-InputObject] <PSObject>
    [-EventName] <String>
    [[-SourceIdentifier] <String>]
    [[-Action] <ScriptBlock>]
    [-MessageData <PSObject>]
    [-SupportEvent]
    [-Forward]
    [-MaxTriggerCount <Int32>]
    [<CommonParameters>]

Description

Register-ObjectEvent cmdlet은 로컬 컴퓨터 또는 원격 컴퓨터에서 .NET 개체에 의해 생성되는 이벤트를 구독합니다.

구독된 이벤트가 발생하면, 해당 이벤트는 세션 내의 이벤트 큐에 추가됩니다. 이벤트 큐에서 이벤트를 얻으려면 Get-Event cmdlet을 사용합니다.

Register-ObjectEvent 매개 변수를 사용하여 큐에서 이벤트를 식별하는 데 도움이 되는 이벤트의 속성 값을 지정할 수 있습니다. 또한 Action 매개 변수를 사용하여 구독된 이벤트가 발생할 때 수행할 작업을 지정하고 Forward 매개 변수를 사용하여 로컬 세션의 이벤트 큐에 원격 이벤트를 보낼 수 있습니다.

이벤트를 구독하면 이벤트 구독자가 세션에 추가됩니다. 세션에서 이벤트 구독자를 얻으려면 Get-EventSubscriber cmdlet을 사용합니다. 구독을 취소하려면 세션에서 이벤트 구독자를 삭제하는 Unregister-Event cmdlet을 사용합니다.

예제

예제 1: 새 프로세스가 시작될 때 이벤트 구독

이 예제에서는 새 프로세스가 시작될 때 생성된 이벤트를 구독합니다.

이 명령은 ManagementEventWatcher 개체를 사용하여 EventArrived 이벤트를 수신합니다. 쿼리 개체는 이벤트가 Win32_Process 클래스에 대한 인스턴스 생성 이벤트임을 지정합니다.

$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
    "TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"

예제 2: 이벤트에 응답하는 작업 지정

작업을 지정할 때 발생하는 이벤트는 이벤트 큐에 추가되지 않습니다. 대신 동작이 이벤트에 응답합니다. 이 예제에서는 새 프로세스가 시작되었음을 나타내는 인스턴스 만들기 이벤트가 발생하면 새 ProcessCreated 이벤트가 발생합니다.

$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
    "TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query
$newEventArgs = @{
    SourceIdentifier = 'PowerShell.ProcessCreated'
    Sender = $Sender
    EventArguments = $EventArgs.NewEvent.TargetInstance
}
$Action = { New-Event @newEventArgs }
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action
Id   Name               PSJobTypeName   State       HasMoreData   Location   Command
--   ----               -------------   -----       -----------   --------   -------
 5   3db2d67a-efff-...                 NotStarted   False                    New-Event @newEventArgs

이 작업은 이벤트 동작에 대해서만 채워지는 자동 변수인 $Sender$EventArgs을 사용합니다.

Register-ObjectEvent 명령은 백그라운드 작업으로 실행되는 작업을 나타내는 작업 개체를 반환합니다. Get-JobReceive-Job같은 작업 cmdlet을 사용하여 백그라운드 작업을 관리할 수 있습니다. 자세한 내용은 about_Jobs참조하십시오.

예제 3: 원격 컴퓨터에서 개체 이벤트 구독

이 예제에서는 원격 컴퓨터에서 개체 이벤트를 구독하는 방법을 보여 줍니다. 이 예제에서는 Enable-ProcessCreationEvent 스크립트 파일에 정의된 ProcessCreationEvent.ps1 함수를 사용합니다. 이 스크립트는 예제의 모든 컴퓨터에서 사용할 수 있습니다.

# ProcessCreationEvent.ps1
function  Enable-ProcessCreationEvent {
    $queryParameters = "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1),
        "TargetInstance isa 'Win32_Process'"
    $Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters

    $objectEventArgs = @{
        Input = New-Object System.Management.ManagementEventWatcher $Query
        EventName = 'EventArrived'
        SourceIdentifier = 'WMI.ProcessCreated'
        MessageData = 'Test'
        Forward = $true
    }
    Register-ObjectEvent @objectEventArgs
}

$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1
Invoke-Command -Session $S { Enable-ProcessCreationEvent }

먼저 두 개의 원격 컴퓨터에서 PSSessions 만들고 $S 변수에 저장합니다. 다음으로, Invoke-Command cmdlet은 ProcessCreationEvent.ps1각 PSSessions에서 $S 스크립트를 실행합니다. 이 작업은 원격 세션에서 Enable-ProcessCreationEvent 함수를 만듭니다. 마지막으로 원격 세션에서 Enable-ProcessCreationEvent 함수를 실행합니다.

이 함수에는 Register-ObjectEvent 개체 및 EventArrived 이벤트를 통해 Win32_Process 개체의 인스턴스 생성 이벤트를 구독하는 명령이 포함됩니다.

예제 4: PSEventJob 개체에서 동적 모듈 사용

이 예제에서는 이벤트 등록에 Action 포함할 때 생성되는 PSEventJob 개체에서 동적 모듈을 사용하는 방법을 보여 줍니다. 먼저 타이머 개체를 만들고 사용하도록 설정한 다음 타이머 간격을 500(밀리초)으로 설정합니다. Register-ObjectEvent cmdlet은 타이머 개체의 경과된 이벤트를 등록합니다. PSEventJob 개체는 $Job 변수에 저장되며 이벤트 구독자의 Action 속성에서도 사용할 수 있습니다. 자세한 내용은 Get-EventSubscriber참조하세요.

타이머 간격이 경과할 때마다 이벤트가 발생하고 작업이 실행됩니다. 이 경우 Get-Random cmdlet은 0에서 100 사이의 난수를 생성하고 $Random 변수에 저장합니다.

$Timer = New-Object Timers.Timer
$Timer.Interval = 500
$Timer.Enabled = $true
$objectEventArgs = @{
    InputObject = $Timer
    EventName = 'Elapsed'
    SourceIdentifier = 'Timer.Random'
    Action = {$Random = Get-Random -Min 0 -Max 100}
}
$Job = Register-ObjectEvent @objectEventArgs
$Job | Format-List -Property *
& $Job.Module {$Random}
& $Job.Module {$Random}
State         : Running
Module        : __DynamicModule_53113769-31f2-42dc-830b-8749325e28d6
StatusMessage :
HasMoreData   : True
Location      :
Command       : $Random = Get-Random -Min 0 -Max 100
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 47b5ec9f-bfe3-4605-860a-4674e5d44ca8
Id            : 7
Name          : Timer.Random
ChildJobs     : {}
PSBeginTime   : 6/27/2019 10:19:06 AM
PSEndTime     :
PSJobTypeName :
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
Information   : {}
60
47

PSEventJob에는 작업을 구현하는 동적 스크립트 모듈을 포함한 Module 속성이 있습니다. 호출 연산자(&)를 사용하여 모듈에서 명령을 호출하여 $Random 변수의 값을 표시합니다.

모듈에 대한 자세한 내용은 about_Modules참조하세요.

매개 변수

-Action

이벤트를 처리할 명령을 지정합니다. 동작의 명령은 이벤트를 이벤트 큐로 보내는 대신 이벤트가 발생할 때 실행될 있습니다. 명령을 중괄호({ })로 묶어 스크립트 블록을 만듭니다.

Action 매개 변수의 값에는 $Event, $EventSubscriber, $Sender, $EventArgs$args 자동 변수가 포함될 수 있습니다. 이러한 변수는 Action 스크립트 블록에 이벤트에 대한 정보를 제공합니다. 자세한 내용은 의 about_Automatic_Variables를 참조하세요.

작업을 지정하면 Register-ObjectEvent 해당 동작을 나타내는 이벤트 작업 개체를 반환합니다. 작업 cmdlet을 사용하여 이벤트 작업을 관리할 수 있습니다.

매개 변수 속성

형식:ScriptBlock
Default value:None
와일드카드 지원:False
DontShow:False

매개 변수 집합

(All)
Position:101
필수:False
파이프라인의 값:False
속성 이름별 파이프라인의 값:False
나머지 인수의 값:False

-EventName

구독할 이벤트를 지정합니다.

이 매개 변수의 값은 .NET 개체가 노출하는 이벤트의 이름이어야 합니다. 예를 들어 ManagementEventWatcher 클래스에는 EventArrivedStopped로 이름이 지정된 이벤트가 있습니다. 이벤트의 이벤트 이름을 찾으려면 Get-Member cmdlet을 사용합니다.

매개 변수 속성

형식:String
Default value:None
와일드카드 지원:False
DontShow:False

매개 변수 집합

(All)
Position:1
필수:True
파이프라인의 값:False
속성 이름별 파이프라인의 값:False
나머지 인수의 값:False

-Forward

cmdlet이 이 구독에 대한 이벤트를 원격 세션으로 보내도록 나타냅니다. 원격 컴퓨터 또는 원격 세션에서 이벤트를 등록할 때 이 매개 변수를 사용합니다.

매개 변수 속성

형식:SwitchParameter
Default value:None
와일드카드 지원:False
DontShow:False

매개 변수 집합

(All)
Position:Named
필수:False
파이프라인의 값:False
속성 이름별 파이프라인의 값:False
나머지 인수의 값:False

-InputObject

이벤트를 생성하는 .NET 개체를 지정합니다. 개체가 포함된 변수를 입력하거나 개체를 가져오는 명령이나 식을 입력합니다.

매개 변수 속성

형식:PSObject
Default value:None
와일드카드 지원:False
DontShow:False

매개 변수 집합

(All)
Position:0
필수:True
파이프라인의 값:False
속성 이름별 파이프라인의 값:False
나머지 인수의 값:False

-MaxTriggerCount

이벤트를 트리거할 수 있는 최대 횟수를 지정합니다.

매개 변수 속성

형식:Int32
Default value:None
와일드카드 지원:False
DontShow:False

매개 변수 집합

(All)
Position:Named
필수:False
파이프라인의 값:False
속성 이름별 파이프라인의 값:False
나머지 인수의 값:False

-MessageData

이 이벤트 구독과 연결할 추가 데이터를 지정합니다. 이 매개 변수의 값은 이 구독과 연결된 모든 이벤트의 MessageData 속성에 나타납니다.

매개 변수 속성

형식:PSObject
Default value:None
와일드카드 지원:False
DontShow:False

매개 변수 집합

(All)
Position:Named
필수:False
파이프라인의 값:False
속성 이름별 파이프라인의 값:False
나머지 인수의 값:False

-SourceIdentifier

구독에 대해 선택한 이름을 지정합니다. 선택한 이름은 현재 세션에서 고유해야 합니다. 기본값은 PowerShell에서 할당하는 GUID입니다.

이 매개 변수의 값은 구독자 개체의 SourceIdentifier 속성 및 이 구독과 연결된 모든 이벤트 개체의 값에 나타납니다.

매개 변수 속성

형식:String
Default value:None
와일드카드 지원:False
DontShow:False

매개 변수 집합

(All)
Position:100
필수:False
파이프라인의 값:False
속성 이름별 파이프라인의 값:False
나머지 인수의 값:False

-SupportEvent

cmdlet이 이벤트 구독을 숨기고 있음을 나타냅니다. 현재 구독이 더 복잡한 이벤트 등록 메커니즘의 일부이며 독립적으로 검색해서는 안 되는 경우 이 매개 변수를 사용합니다.

SupportEvent 매개 변수를 사용하여 만든 구독을 보거나 취소하려면 Get-EventSubscriber cmdlet의 Unregister-Event 매개 변수를 사용합니다.

매개 변수 속성

형식:SwitchParameter
Default value:None
와일드카드 지원:False
DontShow:False

매개 변수 집합

(All)
Position:Named
필수:False
파이프라인의 값:False
속성 이름별 파이프라인의 값:False
나머지 인수의 값:False

CommonParameters

이 cmdlet은 일반적인 매개 변수인 -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction 및 -WarningVariable 매개 변수를 지원합니다. 자세한 내용은 about_CommonParameters를 참조하세요.

입력

None

개체를 이 cmdlet에 파이프로 연결할 수 없습니다.

출력

None

기본적으로 이 cmdlet은 출력을 반환하지 않습니다.

PSEventJob

Action 매개 변수를 사용하는 경우 이 cmdlet은 PSEventJob 개체를 반환합니다.

참고

이벤트, 이벤트 구독 및 이벤트 큐는 현재 세션에만 존재합니다. 현재 세션을 닫으면 이벤트 큐가 삭제되고 이벤트 구독이 취소됩니다.