Udostępnij za pośrednictwem


Get-EventSubscriber

Pobiera subskrybentów zdarzeń w bieżącej sesji.

Składnia

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

Opis

Polecenie cmdlet Get-EventSubscriber pobiera subskrybentów zdarzeń w bieżącej sesji.

Gdy subskrybujesz zdarzenie przy użyciu polecenia cmdlet rejestru zdarzeń, subskrybent zdarzeń jest dodawany do sesji programu Windows PowerShell, a zdarzenia, do których subskrybujesz, są dodawane do kolejki zdarzeń za każdym razem, gdy są one wywoływane. Aby anulować subskrypcję zdarzeń, usuń subskrybenta zdarzeń przy użyciu polecenia cmdlet Unregister-Event.

Przykłady

Przykład 1. Pobieranie subskrybenta zdarzenia dla zdarzenia czasomierza

W tym przykładzie użyto polecenia Get-EventSubscriber, aby uzyskać subskrybenta zdarzenia dla zdarzenia czasomierza.

Pierwsze polecenie używa polecenia cmdlet New-Object do utworzenia wystąpienia obiektu czasomierza. Zapisuje nowy obiekt czasomierza w zmiennej $Timer.

Drugie polecenie używa polecenia cmdlet Get-Member do wyświetlania zdarzeń dostępnych dla obiektów czasomierza. Polecenie używa parametru Type polecenia cmdlet Get-Member z wartością 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)

$params = @{
    InputObject = $Timer
    EventName = 'Elapsed'
    SourceIdentifier = 'Timer.Elapsed'
}
Register-ObjectEvent @params
Get-EventSubscriber

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

Trzecie polecenie używa polecenia cmdlet Register-ObjectEvent do zarejestrowania upłynął zdarzenia w obiekcie czasomierza.

Czwarte polecenie używa polecenia cmdlet Get-EventSubscriber w celu pobrania subskrybenta zdarzenia dla zdarzenia upłynął.

Przykład 2. Użycie modułu dynamicznego w obiekcie PSEventJob we właściwości Action subskrybenta zdarzenia

W tym przykładzie pokazano, jak używać modułu dynamicznego w obiekcie PSEventJob we właściwości Action subskrybenta zdarzenia.

Pierwsze polecenie używa polecenia cmdlet New-Object do utworzenia obiektu czasomierza. Drugie polecenie ustawia interwał czasomierza na 500 (milisekundy).

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

Trzecie polecenie używa polecenia cmdlet Register-ObjectEvent do zarejestrowania zdarzenia upłynął czasomierza. Polecenie zawiera akcję, która obsługuje zdarzenie. Za każdym razem, gdy interwał czasomierza upłynie, zostanie zgłoszone zdarzenie i polecenia w uruchomieniu akcji. W tym przypadku polecenie cmdlet Get-Random generuje liczbę losową z zakresu od 0 do 100 i zapisuje ją w zmiennej $Random. Identyfikator źródłowy zdarzenia to Timer.Random.

Jeśli używasz parametru Action w poleceniu Register-ObjectEvent, polecenie zwraca obiekt PSEventJob, który reprezentuje akcję.

Czwarte polecenie włącza czasomierz.

Piąte polecenie używa polecenia cmdlet Get-EventSubscriber do pobrania subskrybenta zdarzenia Timer.Random zdarzenia. Zapisuje obiekt subskrybenta zdarzeń w zmiennej $Subscriber.

Szóste polecenie pokazuje, że właściwość Action obiektu subskrybenta zdarzenia zawiera obiekt PSEventJob. W rzeczywistości zawiera on ten sam obiekt PSEventJob zwrócony przez polecenie Register-ObjectEvent.

Siódme polecenie używa polecenia cmdlet Format-List do wyświetlenia wszystkich właściwości obiektu PSEventJob we właściwości Action na liście. Wynik pokazuje, że obiekt PSEventJob ma właściwość Module zawierającą dynamiczny moduł skryptu implementujący akcję.

Pozostałe polecenia używają operatora wywołania (&), aby wywołać polecenie w module i wyświetlić wartość zmiennej $Random. Operator wywołania służy do wywoływania dowolnego polecenia w module, w tym poleceń, które nie są eksportowane. W takim przypadku polecenia pokazują losową liczbę, która jest generowana po wystąpieniu zdarzenia upłynął.

Aby uzyskać więcej informacji na temat modułów, zobacz about_Modules.

Przykład 3. Pobieranie ukrytych subskrybentów zdarzeń

W tym przykładzie zarejestrowano subskrybenta zdarzeń dla zdarzenia PowerShell.Exiting. Subskrypcja jest rejestrowana przy użyciu parametru SupportEvent, który ukrywa subskrybenta zdarzeń przed domyślnymi danymi wyjściowymi polecenia cmdlet Get-EventSubscriber. Aby uzyskać wszystkich subskrybentów zdarzeń, w tym ukrytych subskrybentów, należy użyć parametru 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

Parametry

-Force

Wskazuje, że to polecenie cmdlet pobiera wszystkich subskrybentów zdarzeń, w tym subskrybentów zdarzeń ukrytych przy użyciu parametru SupportEventRegister-ObjectEvent, Register-WmiEventi Register-EngineEvent.

Typ:SwitchParameter
Position:1
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-SourceIdentifier

Określa wartość właściwości SourceIdentifier, która pobiera tylko subskrybentów zdarzeń. Domyślnie Get-EventSubscriber pobiera wszystkich subskrybentów zdarzeń w sesji. Symbole wieloznaczne nie są dozwolone. W tym parametrze jest uwzględniana wielkość liter.

Typ:String
Position:0
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-SubscriptionId

Określa identyfikator subskrypcji pobierany przez to polecenie cmdlet. Domyślnie Get-EventSubscriber pobiera wszystkich subskrybentów zdarzeń w sesji.

Typ:Int32
Aliasy:Id
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

None

Nie można potokować obiektów do tego polecenia cmdlet.

Dane wyjściowe

PSEventSubscriber

To polecenie cmdlet zwraca obiekt PSEventSubscriber dla każdego subskrybenta zdarzenia.

Uwagi

Polecenie cmdlet New-Event, które tworzy zdarzenie niestandardowe, nie generuje subskrybenta. W związku z tym polecenie cmdlet Get-EventSubscriber nie znajdzie obiektu subskrybenta dla tych zdarzeń. Jeśli jednak używasz polecenia cmdlet Register-EngineEvent do subskrybowania zdarzenia niestandardowego (w celu przekazania zdarzenia lub określenia akcji), Get-EventSubscriber znajdzie subskrybenta, który Register-EngineEvent generuje.

Zdarzenia, subskrypcje zdarzeń i kolejka zdarzeń istnieją tylko w bieżącej sesji. Jeśli zamkniesz bieżącą sesję, kolejka zdarzeń zostanie odrzucona i subskrypcja zdarzeń zostanie anulowana.