取得目前工作階段中的事件訂閱者。

語法

Get-EventSubscriber [-SubscriptionId] <int> [-Force] [<CommonParameters>]

Get-EventSubscriber [[-SourceIdentifier] <string>] [-Force] [<CommonParameters>]

描述

Get-EventSubscriber Cmdlet 會取得目前工作階段中的事件訂閱者。

當您使用 Register 事件 Cmdlet 訂閱事件時,事件訂閱者會加入至 Windows PowerShell 工作階段,而您所訂閱的事件會在引發時加入至事件佇列。若要取消事件訂閱,請使用 Unregister-Event Cmdlet 刪除事件訂閱者。

參數

-Force

取得所有事件訂閱者,包括已經使用 Register-ObjectEvent、Register-WmiEvent 和 Register-EngineEvent 的 SupportEvent 參數隱藏的事件訂閱者。

必要?

false

位置?

2

預設值

接受管線輸入?

false

接受萬用字元?

false

-SourceIdentifier <string>

只取得有指定的 SourceIdentifier 屬性值的事件訂閱者。根據預設,Get-EventSubscriber 會取得工作階段中的所有事件訂閱者。不允許使用萬用字元。此參數有大小寫之分。

必要?

false

位置?

1

預設值

All event subscribers

接受管線輸入?

true (ByPropertyName)

接受萬用字元?

false

-SubscriptionId <int>

只取得指定的訂閱識別碼。根據預設,Get-EventSubscriber 會取得工作階段中的所有事件訂閱者。

必要?

true

位置?

1

預設值

接受管線輸入?

true (ByPropertyName)

接受萬用字元?

false

<CommonParameters>

這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.

輸入和輸出

輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。

輸入

您無法經由管道將輸入輸出至這個 Cmdlet。

輸出

System.Management.Automation.PSEventSubscriber

Get-EventSubscriber 會傳回代表每個事件訂閱者的物件。

附註

New-Event Cmdlet 會建立自訂事件,但卻不會產生訂閱者。因此,Get-EventSubscriber Cmdlet 將不會尋找這些事件的訂閱者物件。不過,如果您使用 Register-EngineEvent Cmdlet 訂閱自訂事件 (以便於轉送事件或指定動作),Get-EventSubscriber 則將會尋找 Register-EngineEvent 所產生的訂閱者。

事件、事件訂閱和事件佇列只存在於目前的工作階段中。如果關閉目前的工作階段,則會捨棄事件佇列並取消事件訂閱。

範例 1

C:\PS>$timer = New-Object Timers.Timer 

C:\PS> $timer | Get-Member -Type Event 

C:\PS> Register-ObjectEvent -inputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed

C:\PS> Get-EventSubscriber

C:\PS> $timer = New-Object Timers.Timer 

C:\PS> $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)

C:\PS> Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed

C:\PS> Get-EventSubscriber 

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

描述
-----------
這個範例會使用 Get-EventSubscriber 命令取得計時器事件的事件訂閱者。

第一個命令會使用 New-Object Cmdlet 來建立計時器物件的執行個體。此命令會將新的計時器物件儲存在 $timer 變數中。

第二個命令會使用 Get-Member Cmdlet 顯示可供計時器物件使用的事件。此命令會使用具有 Event 值之 Get-Member Cmdlet 的 Type 參數。

第三個命令會使用 Register-ObjectEvent Cmdlet 來註冊計時器物件上的 Elapsed 事件。

第四個命令會使用 Get-EventSubscriber Cmdlet 取得 Elapsed 事件的事件訂閱者。






範例 2

C:\PS>$timer  = New-Object Timers.Timer

C:\PS> $timer.Interval = 500

C:\PS> Register-ObjectEvent -inputObject $timer -eventName Elapsed -sourceIdentifier Timer.Random -Action { $random = Get-Random -Min 0 -Max 100 }

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


C:\PS> $timer.Enabled = $true

C:\PS> $subscriber = Get-EventSubcriber -sourceIdentifer Timer.Random

C:\PS> ($subscriber.action).gettype().fullname
PSEventJob

C:\PS> $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     : {}
...

C:\PS> & $subscriber.action.module {$random}
96

C:\PS> & $subscriber.action.module {$random}
23

描述
-----------
這個範例會示範如何將 PSEventJob 物件中的動態模組用於事件訂閱者的 Action 屬性中。

第一個命令會使用 New-Object Cmdlet 來建立計時器物件。第二個命令會將計時器的間隔設定為 500 (毫秒)。

第三個命令會使用 Register-ObjectEvent Cmdlet 來註冊計時器物件的 Elapsed 事件。該命令包含處理事件的動作。每當經過計時器間隔時,就會引發事件並且執行動作中的命令。在這個範例中,Get-Random Cmdlet 會產生介於 0 與 100 之間的隨機數字,並將它儲存在 $random 變數中。事件的來源識別元為 Timer.Random。

當您在 Register-ObjectEvent 命令中使用 Action 參數時,該命令就會傳回代表動作的 PSEventJob 物件。

第四個命令會啟用計時器。

第五個命令會使用 Get-EventSubscriber Cmdlet 取得 Timer.Random 事件的事件訂閱者。它會將事件訂閱者物件儲存在 $subscriber 變數中。

第六個命令顯示事件訂閱者物件的 Action 屬性包含 PSEventJob 物件。事實上,它會包含 Register-ObjectEvent 命令所傳回的相同 PSEventJob 物件。

第七個命令會使用 Format-List Cmdlet,在清單中顯示 Action 屬性內 PSEventJob 物件的所有屬性。結果顯示 PSEventJob 物件具有 Module 屬性,其中包含實作動作的動態指令碼模組。

其他命令則使用呼叫運算子 (&) 來呼叫模組中的命令,並且顯示 $random 變數的值。您可以使用呼叫運算子來呼叫模組中的任何命令,包括尚未匯出的命令。在這個範例中,這些命令會顯示發生 Elapsed 事件時所產生的隨機數字。

如需模組的詳細資訊,請參閱 about_Modules。






請參閱




目錄