다음을 통해 공유


Get-EventSubscriber

현재 세션의 이벤트 구독자를 가져옵니다.

구문

Get-EventSubscriber
   [[-SourceIdentifier] <String>]
   [-Force]
   [<CommonParameters>]
Get-EventSubscriber
   [-SubscriptionId] <Int32>
   [-Force]
   [<CommonParameters>]

Description

cmdlet은 Get-EventSubscriber 현재 세션의 이벤트 구독자를 가져옵니다.

Register 이벤트 cmdlet을 사용하여 이벤트를 구독하면 이벤트 구독자가 Windows PowerShell 세션에 추가되고 구독한 이벤트가 발생할 때마다 이벤트 큐에 추가됩니다. 이벤트 구독을 취소하려면 cmdlet을 사용하여 이벤트 구독자를 Unregister-Event 삭제합니다.

예제

예제 1: 타이머 이벤트에 대한 이벤트 구독자 가져오기

이 예제에서는 Get-EventSubscriber 명령을 사용하여 타이머 이벤트에 대한 이벤트 구독자를 가져옵니다.

첫 번째 명령은 cmdlet을 New-Object 사용하여 타이머 개체의 인스턴스를 만듭니다. 새 타이머 개체를 변수에 $Timer 저장합니다.

두 번째 명령은 cmdlet을 Get-Member 사용하여 타이머 개체에 사용할 수 있는 이벤트를 표시합니다. 이 명령은 event 값과 함께 cmdlet의 Get-Member Type 매개 변수를 사용합니다.

$Timer = New-Object Timers.Timer
$Timer | Get-Member -Type Event

TypeName: System.Timers.Timer

Name     MemberType Definition
----     ---------- ----------
Disposed Event      System.EventHandler Disposed(System.Object, System.EventArgs)
Elapsed  Event      System.Timers.ElapsedEventHandler Elapsed(System.Object, System.Timers.ElapsedEventArgs)

Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Elapsed
Get-EventSubscriber

SubscriptionId   : 4
SourceObject     : System.Timers.Timer
EventName        : Elapsed
SourceIdentifier : Timer.Elapsed
Action           :
HandlerDelegate  :
SupportEvent     : False
ForwardEvent     : False

세 번째 명령은 cmdlet을 Register-ObjectEvent 사용하여 타이머 개체의 Elapsed 이벤트에 등록합니다.

네 번째 명령은 cmdlet을 Get-EventSubscriber 사용하여 Elapsed 이벤트에 대한 이벤트 구독자를 가져옵니다.

예제 2: 이벤트 구독자의 Action 속성에서 PSEventJob의 동적 모듈 사용

이 예제에서는 이벤트 구독자의 Action 속성에 있는 PSEventJob 개체의 동적 모듈을 사용하는 방법을 보여 줍니다.

첫 번째 명령은 cmdlet을 New-Object 사용하여 타이머 개체를 만듭니다. 두 번째 명령은 타이머 간격을 500(밀리초)으로 설정합니다.

$Timer = New-Object Timers.Timer
$Timer.Interval = 500
$params = @{
    InputObject = $Timer
    EventName = 'Elapsed'
    SourceIdentifier = 'Timer.Random'
    Action = { $Random = Get-Random -Min 0 -Max 100 }
}
Register-ObjectEvent @params

Id  Name           State      HasMoreData  Location  Command
--  ----           -----      -----------  --------  -------
3   Timer.Random   NotStarted False                  $Random = Get-Random ...

$Timer.Enabled = $True
$Subscriber = Get-EventSubscriber -SourceIdentifier Timer.Random
($Subscriber.action).gettype().fullname

System.Management.Automation.PSEventJob

$Subscriber.action | 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     : {}
...

& $Subscriber.action.module {$Random}

세 번째 명령은 cmdlet을 Register-ObjectEvent 사용하여 타이머 개체의 경과된 이벤트를 등록합니다. 이 명령에는 이벤트를 처리하는 작업이 포함됩니다. 타이머 간격이 경과할 때마다 이벤트가 발생하고 작업의 명령이 실행됩니다. 이 경우 cmdlet은 Get-Random 0에서 100 사이의 난수를 생성하고 변수에 $Random 저장합니다. 이벤트의 원본 식별자는 Timer.Random입니다.

명령에서 Action 매개 변수를 Register-ObjectEvent 사용하는 경우 이 명령은 작업을 나타내는 PSEventJob 개체를 반환합니다.

네 번째 명령은 타이머를 사용하도록 설정합니다.

다섯 번째 명령은 cmdlet을 Get-EventSubscriber 사용하여 Timer.Random 이벤트의 이벤트 구독자를 가져옵니다. 이벤트 구독자 개체를 변수에 $Subscriber 저장합니다.

여섯 번째 명령은 이벤트 구독자 개체의 Action 속성에 PSEventJob 개체가 포함되어 있음을 보여 줍니다. 실제로 명령이 반환한 것과 동일한 PSEventJob 개체가 Register-ObjectEvent 포함되어 있습니다.

일곱 번째 명령은 cmdlet을 사용하여 Format-List 목록의 Action 속성에 있는 PSEventJob 개체의 모든 속성을 표시합니다. 결과는 PSEventJob 개체에 작업을 구현하는 동적 스크립트 모듈을 포함하는 Module 속성이 있음을 보여줍니다.

나머지 명령은 호출 연산자(&)를 사용하여 모듈에서 명령을 호출하고 $Random 변수의 값을 표시합니다. 호출 연산자를 사용하여 내보내지 않은 명령을 포함하여 모듈의 모든 명령을 호출할 수 있습니다. 이 경우 명령에는 Elapsed 이벤트가 발생할 때 생성된 임의의 숫자가 표시됩니다.

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

예제 3: 숨겨진 이벤트 구독자 가져오기

다음은 PowerShell.Exiting 이벤트에 대한 이벤트 구독자를 등록하는 예제입니다. 구독은 Cmdlet의 기본 출력에서 이벤트 구독자를 숨기는 SupportEvent 매개 변수를 Get-EventSubscriber 사용하여 등록됩니다. Force 매개 변수를 사용하여 숨겨진 구독자를 포함한 모든 이벤트 구독자를 가져와야 합니다.

Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
    Get-History | Export-Clixml d:\temp\history.clixml
}
Get-EventSubscriber  # No output - must use -Force
Get-EventSubscriber -Force

SubscriptionId   : 1
SourceObject     :
EventName        :
SourceIdentifier : PowerShell.Exiting
Action           : System.Management.Automation.PSEventJob
HandlerDelegate  :
SupportEvent     : True
ForwardEvent     : False

매개 변수

-Force

이 cmdlet은 < a0/>의 Register-WmiEventRegister-ObjectEventRegister-EngineEventSupportEvent 매개 변수를 사용하여 숨겨진 이벤트에 대한 구독자를 포함하여 모든 이벤트 구독자를 가져옵니다.

형식:SwitchParameter
Position:1
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-SourceIdentifier

이벤트 구독자만 가져오는 SourceIdentifier 속성 값을 지정합니다. 기본적으로 세션의 Get-EventSubscriber 모든 이벤트 구독자를 가져옵니다. 와일드카드는 허용되지 않습니다. 이 매개 변수는 대/소문자를 구분합니다.

형식:String
Position:0
Default value:None
필수:False
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-SubscriptionId

이 cmdlet이 가져오는 구독 식별자를 지정합니다. 기본적으로 세션의 Get-EventSubscriber 모든 이벤트 구독자를 가져옵니다.

형식:Int32
별칭:Id
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

입력

None

개체를 이 cmdlet으로 파이프할 수 없습니다.

출력

PSEventSubscriber

이 cmdlet은 각 이벤트 구독자에 대한 PSEventSubscriber 개체를 반환합니다.

참고

사용자 지정 이벤트를 만드는 cmdlet은 New-Event 구독자를 생성하지 않습니다. 따라서 cmdlet은 Get-EventSubscriber 이러한 이벤트에 대한 구독자 개체를 찾을 수 없습니다. 그러나 cmdlet을 Register-EngineEvent 사용하여 이벤트를 전달하거나 작업을 Get-EventSubscriber 지정하기 위해 사용자 지정 이벤트를 구독하는 경우 생성되는 Register-EngineEvent 구독자를 찾습니다.

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