次の方法で共有


Get-EventSubscriber

現在のセッションのイベント サブスクライバーを取得します。

構文

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

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

説明

Get-EventSubscriber コマンドレットは、現在のセッションのイベント サブスクライバーを取得します。

Register event コマンドレットを使用してイベントにサブスクライブすると、イベント サブスクライバーが Windows PowerShell セッションに追加され、イベントが生成されるたびに、サブスクライブしたイベントがイベント キューに追加されます。イベント サブスクリプションを取り消す場合は、Unregister-Event コマンドレットを使用してイベント サブスクライバーを削除します。

パラメーター

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

このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.

入力と出力

入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。

入力

なし

パイプを使用してこのコマンドレットに入力を渡すことはできません。

出力

System.Management.Automation.PSEventSubscriber

Get-EventSubscriber は各イベント サブスクライバーを表すオブジェクトを返します。

New-Event コマンドレットはカスタム イベントを作成しますが、サブスクライバーは生成しません。したがって、Get-EventSubscriber コマンドレットがこれらのイベントのサブスクライバー オブジェクトを見つけることはありません。ただし、Register-EngineEvent コマンドレットを使用して (イベントの転送やアクションの指定を目的として) カスタム イベントにサブスクライブした場合には、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 コマンドレットを使用して、タイマー オブジェクトのインスタンスを作成します。新しいタイマー オブジェクトを $timer 変数に保存します。

2 番目のコマンドは、Get-Member コマンドレットを使用して、タイマー オブジェクトに使用可能なイベントを表示します。Get-Member コマンドレットの Type パラメーターには、Event の値を使用しています。

3 番目のコマンドは、Register-ObjectEvent コマンドレットを使用して、タイマー オブジェクトの Elapsed イベントを登録します。

4 番目のコマンドは、Get-EventSubscriber コマンドレットを使用して、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

説明
-----------
この例は、イベント サブスクライバーの Action プロパティに格納された PSEventJob オブジェクトの動的モジュールを使用する方法を示しています。

最初のコマンドは New-Object コマンドレットを使用してタイマー オブジェクトを作成します。2 番目のコマンドは、タイマーの間隔を 500 (ミリ秒) に設定します。

3 番目のコマンドは、Register-ObjectEvent コマンドレットを使用して、タイマー オブジェクトの Elapsed イベントを登録します。このコマンドには、イベントを処理するアクションが指定されています。タイマーの間隔が経過するたびに、イベントが発生し、このアクションに指定されたコマンドが実行されます。ここでは、Get-Random コマンドレットによって、0 ~ 100 の乱数が生成されて、$random 変数に保存されます。イベントの source 識別子は Timer.Random です。

Register-ObjectEvent コマンドに Action パラメーターを指定すると、そのアクションを表す PSEventJob オブジェクトが返されます。

4 番目のコマンドは、タイマーを有効にします。

5 番目のコマンドは、Get-EventSubscriber コマンドレットを使用して、Timer.Random イベントのイベント サブスクライバーを取得します。取得したイベント サブスクライバー オブジェクトは $subscriber 変数に保存されます。

6 番目のコマンドは、イベント サブスクライバー オブジェクトの Action プロパティに、PSEventJob オブジェクトが格納されていることを証明するものです。実際、Register-ObjectEvent コマンドから返されたものと同じ PSEventJob オブジェクトが格納されています。

7 番目のコマンドは、Format-List コマンドレットを使用して、Action プロパティに格納されている PSEventJob オブジェクトのプロパティをすべて一覧表示します。その結果を見ると、PSEventJob オブジェクトには Module プロパティが存在し、そのプロパティに、アクションを実装する動的スクリプト モジュールが含まれていることがわかります。

残りのコマンドは、呼び出し演算子 (&) を使用し、モジュール内のコマンドを呼び出して、$random 変数の値を表示します。呼び出し演算子を使用すると、エクスポートされないコマンドを含め、モジュール内のコマンドを自由に呼び出すことができます。ここでは、Elapsed イベントの発生時に生成される乱数を表示しています。

モジュールの詳細については、「about_Modules」を参照してください。





関連項目

概念

Register-ObjectEvent
Register-EngineEvent
Register-WmiEvent
Unregister-Event
Get-Event
New-Event
Remove-Event
Wait-Event