Get-EventSubscriber
現在のセッションのイベント サブスクライバーを取得します。
構文
Get-EventSubscriber
[[-SourceIdentifier] <String>]
[-Force]
[<CommonParameters>]
Get-EventSubscriber
[-SubscriptionId] <Int32>
[-Force]
[<CommonParameters>]
説明
Get-EventSubscriber
コマンドレットは、現在のセッションのイベント サブスクライバーを取得します。
Register イベント コマンドレットを使用してイベントをサブスクライブすると、Windows PowerShell セッションにイベント サブスクライバーが追加され、サブスクライブ先のイベントは発生するたびにイベント キューに追加されます。 イベント サブスクリプションを取り消すには、 Unregister-Event
コマンドレットを使用してイベント サブスクライバーを削除します。
例
例 1: タイマー イベントのイベント サブスクライバーを取得する
この例では、 Get-EventSubscriber
コマンドを使用して、タイマー イベントのイベント サブスクライバーを取得します。
最初のコマンドでは、 New-Object
コマンドレットを使用してタイマー オブジェクトのインスタンスを作成します。 新しいタイマー オブジェクトを $Timer
変数に保存します。
2 番目のコマンドでは、 Get-Member
コマンドレットを使用して、タイマー オブジェクトで使用可能なイベントを表示します。 このコマンドでは、 Get-Member
コマンドレットの Type パラメーターを使用し、値が 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)
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
3 番目のコマンドでは、 Register-ObjectEvent
コマンドレットを使用して、タイマー オブジェクトの Elapsed イベントに登録します。
4 番目のコマンドでは、 Get-EventSubscriber
コマンドレットを使用して、 Elapsed イベントのイベント サブスクライバーを取得します。
例 2: イベント サブスクライバーの Action プロパティで PSEventJob の動的モジュールを使用する
この例では、イベント サブスクライバーの Action プロパティの PSEventJob オブジェクトで動的モジュールを使用する方法を示します。
最初のコマンドでは、 New-Object
コマンドレットを使用してタイマー オブジェクトを作成します。 2 番目のコマンドは、タイマーの間隔を 500 (ミリ秒) に設定します。
$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}
3 番目のコマンドでは、 Register-ObjectEvent
コマンドレットを使用してタイマー オブジェクトの Elapsed イベントを登録します。 このコマンドには、イベントを処理するアクションが含まれています。 タイマーの間隔が経過するたびに、イベントが発生してアクション内のコマンドが実行されます。 この場合、 Get-Random
コマンドレットは 0 から 100 までの乱数を生成し、 $Random
変数に保存します。 イベントのソース識別子は Timer.Random です。
Register-ObjectEvent
コマンドで Action パラメーターを使用すると、アクションを表す PSEventJob オブジェクトが返されます。
4 番目のコマンドは、タイマーを有効にします。
5 番目のコマンドでは、 Get-EventSubscriber
コマンドレットを使用して、 Timer.Random イベントのイベント サブスクライバーを取得します。 イベント サブスクライバー オブジェクトを $Subscriber
変数に保存します。
6 番目のコマンドは、イベント サブスクライバー オブジェクトの Action プロパティに PSEventJob オブジェクトが含まれていることを示しています。 実際には、Register-ObjectEvent
コマンドが返したのと同じPSEventJob オブジェクトが含まれています。
7 番目のコマンドでは、 Format-List
コマンドレットを使用して、 PSEventJob オブジェクトのすべてのプロパティを一覧の Action プロパティに表示します。 その結果、 PSEventJob オブジェクトに、アクションを実装する動的スクリプト モジュールを含む Module プロパティが含まれていることが明らかになります。
残りのコマンドでは、呼び出し演算子 (&
) を使用してモジュール内のコマンドを呼び出し、$Random変数の値を表示します。 呼び出し演算子を使用すると、エクスポートされないコマンドを含め、モジュール内の任意のコマンドを呼び出すことができます。 この例では、これらのコマンドにより Elapsed イベントが発生したときに生成される乱数が示されます。
モジュールの詳細については、 about_Modulesを参照してください。
例 3: 非表示のイベント サブスクライバーを取得する
次の使用例は、 PowerShell.Exiting イベントのイベント サブスクライバーを登録します。 サブスクリプションは、 SupportEvent パラメーターを使用して登録されます。 Get-EventSubscriber
コマンドレットの既定の出力からイベント サブスクライバーが非表示になります。 非表示のサブスクライバーを含むすべてのイベント サブスクライバーを取得するには、 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
パラメーター
-Force
このコマンドレットは、Register-ObjectEvent
、Register-WmiEvent
、およびRegister-EngineEvent
の SupportEvent パラメーターを使用して非表示になっているイベントのサブスクライバーを含め、すべてのイベント サブスクライバーを取得することを示します。
型: | SwitchParameter |
配置: | 1 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SourceIdentifier
イベント サブスクライバーのみを取得する SourceIdentifier プロパティ値を指定します。 既定では、 Get-EventSubscriber
はセッション内のすべてのイベント サブスクライバーを取得します。 ワイルドカードは使用できません。 このパラメーターでは、大文字と小文字が区別されます。
型: | String |
配置: | 0 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-SubscriptionId
このコマンドレットが取得するサブスクリプション識別子を指定します。 既定では、 Get-EventSubscriber
はセッション内のすべてのイベント サブスクライバーを取得します。
型: | Int32 |
Aliases: | Id |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
入力
None
このコマンドレットにオブジェクトをパイプすることはできません。
出力
このコマンドレットは、各イベント サブスクライバーの PSEventSubscriber オブジェクトを返します。
メモ
カスタム イベントを作成する New-Event
コマンドレットでは、サブスクライバーは生成されません。 そのため、 Get-EventSubscriber
コマンドレットはこれらのイベントのサブスクライバー オブジェクトを見つけることができません。 ただし、 Register-EngineEvent
コマンドレットを使用して (イベントを転送したり、アクションを指定したりするために) カスタム イベントをサブスクライブすると、 Get-EventSubscriber
Register-EngineEvent
生成されるサブスクライバーが見つかります。
イベント、イベント サブスクリプション、およびイベント キューは、現在のセッションにのみ存在します。 現在のセッションを閉じた場合、イベント キューが破棄され、イベント サブスクリプションが取り消されます。
関連リンク
PowerShell