Get-EventSubscriber
取得目前工作階段中的事件訂閱者。
語法
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 |
預設值 |
所有事件訂閱者 |
接受管線輸入? |
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。
請參閱
概念
Register-ObjectEvent
Register-EngineEvent
Register-WmiEvent
Unregister-Event
Get-Event
New-Event
Remove-Event
Wait-Event