Dela via


Get-EventSubscriber

Hämtar händelseprenumeranterna i den aktuella sessionen.

Syntax

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

Description

Cmdleten Get-EventSubscriber hämtar händelseprenumeranterna i den aktuella sessionen.

När du prenumererar på en händelse med hjälp av en registerhändelse-cmdlet läggs en händelseprenumerant till i din Windows PowerShell-session och de händelser som du prenumererar på läggs till i händelsekön när de aktiveras. Om du vill avbryta en händelseprenumeration tar du bort händelseprenumeranten med hjälp av cmdleten Unregister-Event .

Exempel

Exempel 1: Hämta händelseprenumeranten för en timerhändelse

I det här exemplet används ett Get-EventSubscriber kommando för att hämta händelseprenumeranten för en timerhändelse.

Det första kommandot använder cmdleten New-Object för att skapa en instans av ett timerobjekt. Det sparar det nya timerobjektet i variabeln $Timer .

Det andra kommandot använder cmdleten Get-Member för att visa de händelser som är tillgängliga för tidsinställda objekt. Kommandot använder parametern Typ för cmdleten Get-Member med värdet Händelse.

$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

Det tredje kommandot använder cmdleten Register-ObjectEvent för att registrera sig för händelsen Elapsed på timerobjektet.

Det fjärde kommandot använder cmdleten Get-EventSubscriber för att hämta händelseprenumeranten för händelsen Elapsed .

Exempel 2: Använd den dynamiska modulen i PSEventJob i händelseprenumerantens åtgärdsegenskap

Det här exemplet visar hur du använder den dynamiska modulen i PSEventJob-objektet i händelseprenumerantens åtgärdsegenskap .

Det första kommandot använder cmdleten New-Object för att skapa ett tidsinställt objekt. Det andra kommandot anger tidsintervallet till 500 (millisekunder).

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

Det tredje kommandot använder cmdleten Register-ObjectEvent för att registrera händelsen Elapsed för timerobjektet. Kommandot innehåller en åtgärd som hanterar händelsen. När tidsintervallet förflutit genereras en händelse och kommandona i åtgärden körs. I det här fallet genererar cmdleten Get-Random ett slumpmässigt tal mellan 0 och 100 och sparar det i variabeln $Random . Källidentifieraren för händelsen är Timer.Random.

När du använder en åtgärdsparameter i ett Register-ObjectEvent kommando returnerar kommandot ett PSEventJob-objekt som representerar åtgärden.

Det fjärde kommandot aktiverar timern.

Det femte kommandot använder cmdleten Get-EventSubscriber för att hämta händelseprenumeranten för händelsen Timer.Random . Det sparar händelseprenumerantobjektet i variabeln $Subscriber .

Det sjätte kommandot visar att egenskapen Åtgärd för objektet händelseprenumerant innehåller ett PSEventJob-objekt . I själva verket innehåller den samma PSEventJob-objekt som Register-ObjectEvent kommandot returnerade.

Det sjunde kommandot använder cmdleten Format-List för att visa alla egenskaper för PSEventJob-objektet i egenskapen Åtgärd i en lista. Resultatet visar att PSEventJob-objektet har en modulegenskap som innehåller en modul med dynamiskt skript som implementerar åtgärden.

De återstående kommandona använder anropsoperatorn (&) för att anropa kommandot i modulen och visa värdet för variabeln $Random. Du kan använda anropsoperatorn för att anropa alla kommandon i en modul, inklusive kommandon som inte exporteras. I det här fallet visar kommandona det slumpmässiga tal som genereras när händelsen Förflutit inträffar.

Mer information om moduler finns i about_Modules.

Exempel 3: Hämta dolda händelseprenumeranter

I det här exemplet registreras en händelseprenumerant för händelsen PowerShell.Exiting . Prenumerationen registreras med parametern SupportEvent , som döljer händelseprenumeranten från cmdletens Get-EventSubscriber standardutdata. Du måste använda force-parametern för att hämta alla händelseprenumeranter, inklusive dolda prenumeranter.

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

Parametrar

-Force

Anger att den här cmdleten hämtar alla händelseprenumeranter, inklusive prenumeranter för händelser som är dolda med hjälp av parametern SupportEvent för Register-ObjectEvent, Register-WmiEventoch Register-EngineEvent.

Typ:SwitchParameter
Position:1
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-SourceIdentifier

Anger egenskapsvärdet SourceIdentifier som endast hämtar händelseprenumeranterna. Som standard Get-EventSubscriber hämtar alla händelseprenumeranter i sessionen. Jokertecken är inte tillåtna. Den här parametern är skiftlägeskänslig.

Typ:String
Position:0
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-SubscriptionId

Anger den prenumerationsidentifierare som den här cmdleten hämtar. Som standard Get-EventSubscriber hämtar alla händelseprenumeranter i sessionen.

Typ:Int32
Alias:Id
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

Indata

None

Du kan inte skicka objekt till den här cmdleten.

Utdata

PSEventSubscriber

Den här cmdleten returnerar ett PSEventSubscriber-objekt för varje händelseprenumerant.

Kommentarer

Cmdleten New-Event , som skapar en anpassad händelse, genererar ingen prenumerant. Därför hittar cmdleten Get-EventSubscriber inte något prenumerantobjekt för dessa händelser. Men om du använder cmdleten Register-EngineEvent för att prenumerera på en anpassad händelse (för att vidarebefordra händelsen eller för att ange en åtgärd) Get-EventSubscriber hittar du den prenumerant som Register-EngineEvent genererar.

Händelser, händelseprenumerationer och händelsekön finns bara i den aktuella sessionen. Om du stänger den aktuella sessionen ignoreras händelsekön och händelseprenumerationen avbryts.