訂閱 Microsoft .NET Framework 物件所產生的事件。
語法
Register-ObjectEvent [-InputObject] <psobject> [-EventName] <string> [[-SourceIdentifier] <string>] [[-Action] <scriptblock>] [-Forward] [-MessageData <psobject>] [-SupportEvent] [<CommonParameters>]
描述
Register-ObjectEvent Cmdlet 會在本機電腦或遠端電腦上訂閱 .NET Framework 物件所產生的事件。
當引發訂閱的事件時,訂閱的事件會新增到工作階段中的事件佇列。若要取得事件佇列中的事件,請使用 Get-Event Cmdlet。
您可以使用 Register-ObjectEvent 的參數指定事件的屬性值,以協助您識別佇列中的事件。也可以使用 Action 參數指定當引發訂閱的事件時所要採取的動作,並使用 Forward 參數將遠端事件傳送到本機工作階段中的事件佇列。
訂閱事件時,事件訂閱者會新增到工作階段。若要取得工作階段中的事件訂閱者,請使用 Get-EventSubscriber Cmdlet。若要取消訂閱,請使用 Unregister-Event Cmdlet,它會從工作階段刪除事件訂閱者。
參數
-Action <scriptblock>
指定要處理事件的命令。當引發事件時會執行 Action 中的命令,而非將事件傳送到事件佇列。請以大括號 ( { } ) 括住命令以建立指令碼區塊。
Action 參數的值可以包含 $Event、$EventSubscriber、$Sender、$SourceEventArgs 和 $SourceArgs 自動變數,這些自動變數為 Action 指令碼區塊提供事件的相關資訊。如需詳細資訊,請參閱 about_Automatic_Variables。
指定動作時,Register-ObjectEvent 會傳回代表該動作的事件工件物件。您可以使用 Job Cmdlet 管理事件工作。
必要? |
false |
位置? |
102 |
預設值 |
None. |
接受管線輸入? |
false |
接受萬用字元? |
false |
-EventName <string>
指定所要訂閱的事件。請輸入事件名稱。此參數為必要項。
此參數的值不是您為事件訂閱所選取的名稱,而是 .NET Framework 物件所公開的事件名稱。例如,ManagementEventWatcher 類別有名稱為 "EventArrived" 和 "Stopped" 的事件。若要找出事件的事件名稱,請使用 Get-Member Cmdlet。
必要? |
true |
位置? |
2 |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
false |
-Forward
將這個訂閱的事件傳送到遠端工作階段。當您在遠端電腦上或透過遠端工作階段註冊事件時,請使用此參數。
必要? |
false |
位置? |
named |
預設值 |
False |
接受管線輸入? |
false |
接受萬用字元? |
false |
-InputObject <psobject>
指定產生事件的 .NET Framework 物件。請輸入包含物件的變數,或輸入可取得物件的命令或運算式。此參數為必要項。
必要? |
true |
位置? |
1 |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
false |
-MessageData <psobject>
指定要與這個事件訂閱產生關聯的任何其他資料。此參數的值會出現在所有與這個訂閱關聯之事件的 MessageData 屬性中。
必要? |
false |
位置? |
named |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
false |
-SourceIdentifier <string>
指定您為訂閱所選取的名稱。您所選取的名稱在目前工作階段中必須是唯一的。預設值為 Windows PowerShell 指派的 GUID。
此參數的值會出現在用戶物件和所有與這個訂閱關聯之事件的 SourceIdentifier 屬性中。
必要? |
false |
位置? |
101 |
預設值 |
GUID |
接受管線輸入? |
false |
接受萬用字元? |
false |
-SupportEvent
隱藏事件訂閱。當目前的訂閱屬於較複雜的事件註冊機制,而且不可單獨進行探索時,請使用此參數。
若要檢視或取消以 SupportEvent 參數建立的訂閱,請使用 Get-EventSubscriber 和 Unregister-Event Cmdlet 的 Force 參數。
必要? |
false |
位置? |
named |
預設值 |
False |
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
無 您無法經由管道將物件輸出至 Register-ObjectEvent。 |
輸出 |
無 這個 Cmdlet 不會產生任何輸出。 |
附註
事件、事件訂閱和事件佇列只存在於目前的工作階段中。如果關閉目前的工作階段,則會捨棄事件佇列並取消事件訂閱。
範例 1
C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived" 描述 ----------- 這個範例會訂閱當新處理序啟動時產生的事件。 這個範例中的命令會使用 ManagementEventWatcher 物件取得 EventArrived 事件。查詢物件會指定事件是 Win32_Process 類別的執行個體建立事件。
範例 2
C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query C:\PS> $action = { New-Event "PowerShell.ProcessCreated" -Sender $sender -EventArguments $SourceEventArgs.NewEvent.TargetInstance } C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived" -action $action Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 422cfe5a-65e... Running True New-Event "PowerShe... 描述 ----------- 這個範例示範如何指定要回應事件的動作。指定動作時,所引發的事件不會新增至事件佇列。不過,該動作會回應事件。 在這個範例中,引發執行個體建立事件,表示新的處理啟動而引發新的 ProcessCreated 事件。 該動作會使用僅針對事件動作填入的 $Sender 和 $SourceEventArgs 自動變數。 Register-ObjectEvent 命令會傳回代表動作的工作物件,它會以背景工作的方式執行。您可以使用 Job Cmdlet (例如 Get-Job 和 Receive-Job) 管理背景工作。 如需詳細資訊,請參閱 about_Jobs。
範例 3
C:\PS>$s = new-pssession -computername Server01, Server02 C:\PS> invoke-command -session $s -filepath ProcessCreationEvent.ps1 C:\PS> invoke-command -session $s { get-event } # ProcessCreationEvent.ps1 function Enable-ProcessCreationEvent { $query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", ` (New-Object TimeSpan 0,0,1), ` "TargetInstance isa 'Win32_Process'" $processWatcher = New-Object System.Management.ManagementEventWatcher $query $identifier = "WMI.ProcessCreated" Register-ObjectEvent -input $processWatcher -eventName "EventArrived" ` -sourceIdentifier $identifier -messageData "Test" -forward } } EnableProcessCreationEvent 描述 ----------- 這個範例示範在遠端電腦上訂閱物件事件。 第一個命令會在兩台遠端電腦上建立 PSSessions,然後將它們儲存到 $s 變數。 第二個命令會使用 Invoke-Command Cmdlet 的 FilePath 參數,在 $s 的每個 PSSession 內執行 ProcessCreationEvent.ps1 指令碼。 此指令碼內含的 Register-ObjectEvent 命令會透過 ManagementEventWatcher 物件及其 EventArrived 事件,訂閱 Win32_Process 物件上的執行個體建立事件。
範例 4
C:\PS>$timer = New-Object Timers.Timer C:\PS> $timer.Interval = 500 C:\PS> $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed -sourceIdentifier Timer.Random -Action {$random = Get-Random -Min 0 -Max 100} C:\PS> $job.gettype().fullname System.Management.Automation.PSEventJob C:\PS> $job | 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> $timer.Enabled = $true C:\PS> & $job.module {$random} 60 C:\PS> & $job.module {$random} 47 描述 ----------- 這個範例會示範如何將動態模組用於您在事件註冊中包含 Action 時所建立的 PSEventJob 物件中。 第一個命令會使用 New-Object Cmdlet 來建立計時器物件。第二個命令會將計時器的間隔設定為 500 (毫秒)。 第三個命令會使用 Register-ObjectEvent Cmdlet 來註冊計時器物件的 Elapsed 事件。該命令包含處理事件的動作。每當經過計時器間隔時,就會引發事件並且執行動作中的命令。在這個範例中,Get-Random Cmdlet 會產生介於 0 與 100 之間的亂數並將它儲存在 $random 變數中。 當您在 Register-ObjectEvent 命令中使用 Action 參數時,該命令就會傳回代表動作的 PSEventJob 物件,再將工作物件儲存在 $job 變數中。 Register-ObjectEvent Cmdlet 所傳回的 PSEventJob 物件也可以用於事件訂閱者的 Action 屬性中。如需詳細資訊,請參閱 Get-EventSubscriber。 第四個命令會顯示 $job 變數包含 PSEventJob 物件。第五個命令會使用 Format-List Cmdlet,以清單顯示 PSEventJob 物件的所有屬性。 PSEventJob 具有 Module 屬性,其中包含實作動作的動態指令碼模組。 第六個命令會啟用計時器。 其他命令則使用呼叫運算子 (&) 來叫用模組中的命令並且顯示 $random 變數的值。您可以使用呼叫運算子來叫用模組中的任何命令,包括尚未匯出的命令。在這個範例中,這些命令會顯示發生 Elapsed 事件時所產生的亂數。 如需模組的詳細資訊,請參閱 about_Modules。
請參閱