Register-EngineEvent
PowerShell 엔진 및 New-Event
cmdlet에서 생성되는 이벤트를 구독합니다.
Syntax
Register-EngineEvent
[-SourceIdentifier] <String>
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Description
cmdlet은 Register-EngineEvent
PowerShell 엔진 및 New-Event
cmdlet에서 생성된 이벤트를 구독합니다. SourceIdentifier 매개 변수를 사용하여 이벤트를 지정합니다.
이 cmdlet을 사용하여 cmdlet에서 생성된 OnIdle 또는 종료 엔진 이벤트 및 이벤트를 구독할 수 있습니다.New-Event
이러한 이벤트는 구독하지 않고 세션의 이벤트 큐에 자동으로 추가됩니다. 그러나 구독을 사용하면 이벤트를 전달하고, 이벤트에 응답하는 작업을 지정하고, 구독을 취소할 수 있습니다.
이벤트를 구독하면 이벤트 구독자가 세션에 추가됩니다. 세션에서 이벤트 구독자를 얻으려면 cmdlet을 Get-EventSubscriber
사용합니다. 구독을 취소하려면 세션에서 이벤트 구독자를 삭제하는 cmdlet을 사용합니다 Unregister-Event
.
구독된 이벤트가 발생하면 세션의 이벤트 큐에 추가됩니다. 이벤트 큐에서 이벤트를 얻으려면 cmdlet을 Get-Event
사용합니다.
예제
예제 1: 원격 컴퓨터에 PowerShell 엔진 이벤트 등록
다음은 두 원격 컴퓨터에서 PowerShell 엔진 이벤트를 등록하는 예제입니다.
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S {
Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Forward
}
New-PSSession
는 각 원격 컴퓨터에서 사용자 관리 세션(PSSession)을 만듭니다. cmdlet은 Invoke-Command
원격 세션에서 명령을 실행 Register-EngineEvent
합니다.
Register-EngineEvent
는 SourceIdentifier 매개 변수를 사용하여 이벤트를 식별합니다. Forward 매개 변수는 원격 세션에서 로컬 세션으로 이벤트를 전달하도록 엔진에 지시합니다.
예제 2: Exiting 이벤트가 발생할 때 지정된 작업 수행
이 예제에서는 PowerShell.Exiting 이벤트가 발생할 때 특정 작업을 수행하도록 실행하는 Register-EngineEvent
방법을 보여 줍니다.
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
Get-History | Export-Clixml $HOME\history.clixml
}
이벤트 구독을 숨기려면 SupportEvent 매개 변수가 추가됩니다. PowerShell이 종료되면 이 경우 종료 세션의 명령 기록이 사용자의 $HOME
디렉터리에 있는 XML 파일을 내보냅니다.
예제 3: 사용자 정의 이벤트 만들기 및 구독
이 예제에서는 원본 MyEventSource에서 이벤트에 대한 구독을 만듭니다. 작업의 진행률을 모니터링하는 데 사용할 임의 원본입니다. Register-EngineEvent
는 구독을 만드는 데 사용됩니다. Action 매개 변수의 스크립트 블록은 이벤트 데이터를 텍스트 파일에 기록합니다.
Register-EngineEvent -SourceIdentifier MyEventSource -Action {
"Event: {0}" -f $event.messagedata | Out-File c:\temp\MyEvents.txt -Append
}
Start-Job -Name TestJob -ScriptBlock {
While ($True) {
Register-EngineEvent -SourceIdentifier MyEventSource -Forward
Start-Sleep -seconds 2
"Doing some work..."
New-Event -SourceIdentifier MyEventSource -Message ("{0} - Work done..." -f (Get-Date))
}
}
Start-Sleep -seconds 4
Get-EventSubscriber
Get-Job
SubscriptionId : 12
SourceObject :
EventName :
SourceIdentifier : MyEventSource
Action : System.Management.Automation.PSEventJob
HandlerDelegate :
SupportEvent : False
ForwardEvent : False
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
18 MyEventSource Running True …
19 TestJob BackgroundJob Running True localhost …
Register-EngineEvent
는 작업 ID 18을 만들었습니다. Start-Job
는 작업 ID 19를 만들었습니다. 예제 #4에서는 이벤트 구독 및 작업을 제거한 다음 로그 파일을 검사합니다.
예제 4: 이벤트 등록 취소 및 작업 클린
이는 예제 3의 연속입니다. 이 예제에서는 몇 가지 이벤트가 발생할 때까지 10초 동안 기다립니다. 그런 다음 이벤트 구독의 등록을 취소합니다.
PS> Start-Sleep -seconds 10
PS> Get-EventSubscriber | Unregister-Event
PS> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
18 MyEventSource Stopped False …
19 TestJob BackgroundJob Running True localhost …
PS> Stop-Job -Id 19
PS> Get-Job | Remove-Job
PS> Get-Content C:\temp\MyEvents.txt
Event: 2/18/2020 2:36:19 PM - Work done...
Event: 2/18/2020 2:36:21 PM - Work done...
Event: 2/18/2020 2:36:23 PM - Work done...
Event: 2/18/2020 2:36:25 PM - Work done...
Event: 2/18/2020 2:36:27 PM - Work done...
Event: 2/18/2020 2:36:29 PM - Work done...
Event: 2/18/2020 2:36:31 PM - Work done...
cmdlet은 Unregister-Event
이벤트 구독과 연결된 작업을 중지합니다(작업 ID 18). 작업 ID 19는 여전히 실행 중이며 새 이벤트를 만듭니다. 작업 cmdlet을 사용하여 작업을 중지하고 불필요한 작업 개체를 제거합니다. Get-Content
는 로그 파일의 내용을 표시합니다.
매개 변수
-Action
이벤트를 처리하는 명령을 지정합니다. 이벤트의 명령은 이벤트를 이벤트 큐로 보내는 대신 이벤트가 발생할 때 실행됩니다. 명령을 중괄호({}
)로 묶어 스크립트 블록을 만듭니다.
Action 매개 변수의 값에는 이벤트에 대한 정보를 Action 스크립트 블록에 제공하는 , , $EventArgs
및 $Args
자동 변수가 포함될 $Event
$EventSubscriber
$Sender
수 있습니다. 자세한 내용은 about_Automatic_Variables를 참조하세요.
작업을 지정하면 해당 동작 Register-EngineEvent
을 나타내는 이벤트 작업 개체를 반환합니다. 작업 cmdlet을 사용하여 이벤트 작업을 관리할 수 있습니다.
Type: | ScriptBlock |
Position: | 101 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Forward
cmdlet이 이 구독에 대한 이벤트를 로컬 컴퓨터의 세션으로 보내도록 나타냅니다. 원격 컴퓨터 또는 원격 세션에서 이벤트를 등록할 때 이 매개 변수를 사용합니다.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxTriggerCount
이벤트 구독에 대해 작업이 실행되는 최대 횟수를 지정합니다.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MessageData
이벤트와 연결된 추가 데이터를 지정합니다. 이 매개 변수의 값은 이벤트 개체의 MessageData 속성에 나타납니다.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SourceIdentifier
구독할 이벤트의 원본 식별자를 지정합니다. 원본 식별자는 현재 세션에서 고유해야 합니다. 이 매개 변수는 필수입니다.
이 매개 변수의 값은 구독자 개체의 SourceIdentifier 속성 값과 이 구독과 연결된 모든 이벤트 개체의 값에 나타납니다.
값은 이벤트의 원본과 관련이 있습니다. 이 값은 cmdlet과 함께 사용하기 위해 만든 임의의 값일 New-Event
수 있습니다. PowerShell 엔진은 PSEngineEvent 값 PowerShell.Exiting 및 PowerShell.OnIdle을 지원합니다.
Type: | String |
Position: | 100 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SupportEvent
cmdlet이 이벤트 구독을 숨기고 있음을 나타냅니다. 현재 구독이 더 복잡한 이벤트 등록 메커니즘의 일부이며 독립적으로 검색해서는 안 되는 경우 이 매개 변수를 추가합니다.
SupportEvent 매개 변수를 사용하여 만든 구독을 보거나 취소하려면 Force 매개 변수를 or Unregister-Event
cmdlet에 Get-EventSubscriber
추가합니다.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
입력
None
개체를 이 cmdlet으로 파이프할 수 없습니다.
출력
None
기본적으로 이 cmdlet은 출력을 반환하지 않습니다.
Action 매개 변수를 사용하는 경우 이 cmdlet은 PSEventJob 개체를 반환합니다.
참고
이벤트, 이벤트 구독 및 이벤트 큐는 현재 세션에만 존재합니다. 현재 세션을 닫으면 이벤트 큐가 해제되고카드 이벤트 구독이 취소됩니다.
Exiting 이벤트를 구독할 때 Action 매개 변수로 실행할 수 있는 cmdlet은 Microsoft.PowerShell.Core 및 Microsoft.PowerShell.Utility 모듈의 cmdlet으로 제한됩니다. Exiting 이벤트는 세션이 PowerShell의 제어 하에 종료될 때만 발생합니다. 호스트 애플리케이션 또는 터미널 창을 닫을 때 이벤트가 발생하지 않습니다.
엔진이 파이프라인을 실행하지 않는 경우 유휴 상태로 간주됩니다. OnIdle 이벤트는 PowerShell이 300밀리초(밀리초) 동안 유휴 상태일 때 발생합니다.
참고 항목
PSReadLine을 사용하는 경우 시간이 초과되면 OnIdle 이벤트가 발생 ReadKey()
합니다(300ms에 입력 없음). 사용자가 명령줄을 편집하는 동안 이벤트를 알릴 수 있습니다. 예를 들어 사용자가 사용할 매개 변수를 결정하는 데 도움을 읽고 있습니다. PSReadLine 2.2.0-beta4 부터 OnIdle 동작은 ReadKey()
시간 제한이 있고 현재 편집 버퍼가 비어 있는 경우에만 이벤트 신호를 표시하도록 변경되었습니다.
관련 링크
PowerShell