Partilhar via


Get-EventSubscriber

Obtém os assinantes do evento na sessão atual.

Sintaxe

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

Description

O Get-EventSubscriber cmdlet obtém os assinantes do evento na sessão atual.

Quando você se inscreve em um evento usando um cmdlet de evento Register, um assinante de evento é adicionado à sua sessão do Windows PowerShell e os eventos aos quais você se inscreveu são adicionados à sua fila de eventos sempre que são gerados. Para cancelar uma assinatura de evento, exclua o assinante do evento usando o Unregister-Event cmdlet.

Exemplos

Exemplo 1: Obter o subscritor do evento para um evento de temporizador

Este exemplo usa um Get-EventSubscriber comando para obter o assinante do evento para um evento de timer.

O primeiro comando usa o New-Object cmdlet para criar uma instância de um objeto de timer. Ele salva o novo objeto de temporizador na $Timer variável.

O segundo comando usa o Get-Member cmdlet para exibir os eventos disponíveis para objetos de timer. O comando usa o parâmetro Type do Get-Member cmdlet com um valor de Event.

$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

O terceiro comando usa o Register-ObjectEvent cmdlet para registrar o evento Elapsed no objeto de timer.

O quarto comando usa o Get-EventSubscriber cmdlet para obter o assinante do evento Elapsed .

Exemplo 2: Use o módulo dinâmico em PSEventJob na propriedade Action do assinante do evento

Este exemplo mostra como usar o módulo dinâmico no objeto PSEventJob na propriedade Action do assinante do evento.

O primeiro comando usa o New-Object cmdlet para criar um objeto de timer. O segundo comando define o intervalo do temporizador para 500 (milissegundos).

$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}

O terceiro comando usa o Register-ObjectEvent cmdlet para registrar o evento Elapsed do objeto timer. O comando inclui uma ação que manipula o evento. Sempre que o intervalo do temporizador decorre, um evento é gerado e os comandos na ação são executados. Nesse caso, o Get-Random cmdlet gera um número aleatório entre 0 e 100 e o salva na $Random variável. O identificador de origem do evento é Timer.Random.

Quando você usa um parâmetro Action em um Register-ObjectEvent comando, o comando retorna um objeto PSEventJob que representa a ação.

O quarto comando habilita o temporizador.

O quinto comando usa o Get-EventSubscriber cmdlet para obter o assinante do evento Timer.Random . Ele salva o objeto do assinante do $Subscriber evento na variável.

O sexto comando mostra que a propriedade Action do objeto de assinante do evento contém um objeto PSEventJob . Na verdade, ele contém o mesmo objeto PSEventJob que o Register-ObjectEvent comando retornou.

O sétimo comando usa o Format-List cmdlet para exibir todas as propriedades do objeto PSEventJob na propriedade Action em uma lista. O resultado revela que o objeto PSEventJob tem uma propriedade Module que contém um módulo de script dinâmico que implementa a ação.

Os comandos restantes usam o operador call (&) para invocar o comando no módulo e exibir o valor da variável $Random. Você pode usar o operador call para invocar qualquer comando em um módulo, incluindo comandos que não são exportados. Nesse caso, os comandos mostram o número aleatório que está sendo gerado quando o evento Elapsed ocorre.

Para obter mais informações sobre módulos, consulte about_Modules.

Exemplo 3: Obter subscritores ocultos do evento

Este exemplo registra um assinante de evento para o evento PowerShell.Exiting . A assinatura é registrada usando o parâmetro SupportEvent , que oculta o assinante do evento da saída padrão do Get-EventSubscriber cmdlet. Você deve usar o parâmetro Force para obter todos os assinantes do evento, incluindo assinantes ocultos.

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

Parâmetros

-Force

Indica que esse cmdlet obtém todos os assinantes de eventos, incluindo assinantes de eventos que estão ocultos usando o parâmetro SupportEvent de Register-ObjectEvent, Register-WmiEvente Register-EngineEvent.

Tipo:SwitchParameter
Position:1
Default value:None
Necessário:False
Aceitar entrada de pipeline:False
Aceitar carateres universais:False

-SourceIdentifier

Especifica o valor da propriedade SourceIdentifier que obtém apenas os assinantes do evento. Por padrão, Get-EventSubscriber obtém todos os assinantes do evento na sessão. Curingas não são permitidos. Este parâmetro diferencia maiúsculas de minúsculas.

Tipo:String
Position:0
Default value:None
Necessário:False
Aceitar entrada de pipeline:True
Aceitar carateres universais:False

-SubscriptionId

Especifica o identificador de assinatura que esse cmdlet obtém. Por padrão, Get-EventSubscriber obtém todos os assinantes do evento na sessão.

Tipo:Int32
Aliases:Id
Position:0
Default value:None
Necessário:True
Aceitar entrada de pipeline:True
Aceitar carateres universais:False

Entradas

None

Não é possível canalizar objetos para este cmdlet.

Saídas

PSEventSubscriber

Este cmdlet retorna um objeto PSEventSubscriber para cada assinante de evento.

Notas

O New-Event cmdlet, que cria um evento personalizado, não gera um assinante. Portanto, o Get-EventSubscriber cmdlet não encontrará um objeto de assinante para esses eventos. No entanto, se você usar o Register-EngineEvent cmdlet para se inscrever em um evento personalizado (para encaminhar o evento ou especificar uma ação), Get-EventSubscriber encontrará o assinante que Register-EngineEvent gera.

Eventos, assinaturas de eventos e a fila de eventos existem somente na sessão atual. Se você fechar a sessão atual, a fila de eventos será descartada e a assinatura do evento será cancelada.