ค้นหาเว็บไซต์

รับ-EventSubscriber (Microsoft.PowerShell.Utility)


Get-EventSubscriber

โมดูล :
Microsoft.PowerShell.Utility

รับสมาชิกเหตุการณ์ในเซสชันปัจจุบัน

ไวยากรณ์

Get-EventSubscriber
   [[-SourceIdentifier] <String>]
   [-Force]
   [<CommonParameters>]
Get-EventSubscriber
   [-SubscriptionId] <Int32>
   [-Force]
   [<CommonParameters>]

คำอธิบาย

Get-EventSubscriber cmdlet รับสมาชิกเหตุการณ์ในเซสชันปัจจุบัน

เมื่อคุณสมัครรับเหตุการณ์โดยใช้ Register event cmdlet ผู้สมัครสมาชิกเหตุการณ์จะถูกเพิ่มลงในเซสชัน Windows PowerShell ของคุณ และกิจกรรมที่คุณสมัครเป็นสมาชิกจะถูกเพิ่มลงในคิวเหตุการณ์ของคุณทุกครั้งที่มีการเพิ่มขึ้น หากต้องการยกเลิกการสมัครสมาชิกกิจกรรม ให้ลบผู้สมัครสมาชิกกิจกรรมโดยใช้ Unregister-Event cmdlet

ตัวอย่าง

ตัวอย่างที่ 1: รับสมาชิกเหตุการณ์สำหรับเหตุการณ์ตัวจับเวลา

ตัวอย่างนี้ใช้คำสั่ง Get-EventSubscriber เพื่อรับสมาชิกเหตุการณ์สำหรับเหตุการณ์ตัวจับเวลา

คำสั่งแรกใช้ New-Object cmdlet เพื่อสร้างอินสแตนซ์ของวัตถุตัวจับเวลา โดยจะบันทึกวัตถุตัวจับเวลาใหม่ในตัวแปร $Timer

คำสั่งที่สองใช้ cmdlet Get-Member เพื่อแสดงเหตุการณ์ที่พร้อมใช้งานสำหรับวัตถุตัวจับเวลา คำสั่งใช้พารามิเตอร์ Type ของ cmdlet Get-Member ที่มีค่าเป็น 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

คำสั่งที่สามใช้ Register-ObjectEvent cmdlet เพื่อลงทะเบียนสำหรับเหตุการณ์ Elapsed บนวัตถุตัวจับเวลา

คำสั่งที่สี่ใช้ Get-EventSubscriber cmdlet เพื่อรับสมาชิกเหตุการณ์สำหรับเหตุการณ์ Elapsed

ตัวอย่างที่ 2: ใช้โมดูลไดนามิกใน PSEventJob ในคุณสมบัติ Action ของสมาชิกเหตุการณ์

ตัวอย่างนี้แสดงวิธีใช้โมดูลไดนามิกในอ็อบเจ็กต์ PSEventJob ในคุณสมบัติ Action ของสมาชิกเหตุการณ์

คำสั่งแรกใช้ cmdlet New-Object เพื่อสร้างวัตถุตัวจับเวลา คำสั่งที่สองตั้งค่าช่วงเวลาของตัวจับเวลาเป็น 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}

คำสั่งที่สามใช้ cmdlet Register-ObjectEvent เพื่อลงทะเบียนเหตุการณ์ที่ผ่านไปของวัตถุตัวจับเวลา คำสั่งประกอบด้วยการดำเนินการที่จัดการเหตุการณ์ เมื่อใดก็ตามที่ช่วงเวลาของตัวจับเวลาผ่านไป เหตุการณ์จะเกิดขึ้นและคำสั่งในการทำงานจะทำงาน ในกรณีนี้ Get-Random cmdlet จะสร้างตัวเลขสุ่มระหว่าง 0 ถึง 100 และบันทึกไว้ในตัวแปร $Random ตัวระบุแหล่งที่มาของเหตุการณ์คือ Timer.Random

เมื่อคุณใช้พารามิเตอร์ Action ในคำสั่ง Register-ObjectEvent คำสั่งจะส่งคืนออบเจ็กต์ PSEventJob ที่แสดงถึงการดำเนินการ

คำสั่งที่สี่เปิดใช้งานตัวจับเวลา

คำสั่งที่ห้าใช้ Get-EventSubscriber cmdlet เพื่อรับสมาชิกเหตุการณ์ของเหตุการณ์ Timer.Random โดยจะบันทึกออบเจ็กต์สมาชิกเหตุการณ์ในตัวแปร $Subscriber

คำสั่งที่หกแสดงว่าคุณสมบัติ Action ของอ็อบเจ็กต์สมาชิกเหตุการณ์มีอ็อบเจ็กต์ PSEventJob อันที่จริง มันมีออบเจ็กต์ PSEventJob เดียวกันกับที่คำสั่ง Register-ObjectEvent ส่งกลับ

คำสั่งที่เจ็ดใช้ Format-List cmdlet เพื่อแสดงคุณสมบัติทั้งหมดของวัตถุ PSEventJob ในคุณสมบัติ Action ในรายการ ผลลัพธ์เผยให้เห็นว่าออบเจ็กต์ PSEventJob มีคุณสมบัติโมดูลซึ่งประกอบด้วยโมดูลสคริปต์แบบไดนามิกที่ดำเนินการดังกล่าว

คำสั่งที่เหลือใช้ตัวดำเนินการเรียก (&) เพื่อเรียกใช้คำสั่งในโมดูลและแสดงค่าของตัวแปร $Random คุณสามารถใช้โอเปอเรเตอร์การโทรเพื่อเรียกใช้คำสั่งใดๆ ในโมดูล รวมถึงคำสั่งที่ไม่ได้ส่งออกด้วย ในกรณีนี้ คำสั่งจะแสดงตัวเลขสุ่มที่ถูกสร้างขึ้นเมื่อเหตุการณ์ที่ผ่านไปเกิดขึ้น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมดูล โปรดดูที่ about_Modules

ตัวอย่างที่ 3: รับสมาชิกเหตุการณ์ที่ซ่อนอยู่

ตัวอย่างนี้ลงทะเบียนสมาชิกเหตุการณ์สำหรับเหตุการณ์ PowerShell.Exiting การสมัครสมาชิกได้รับการลงทะเบียนโดยใช้พารามิเตอร์ SupportEvent ซึ่งจะซ่อนผู้สมัครสมาชิกเหตุการณ์จากเอาต์พุตเริ่มต้นของ cmdlet Get-EventSubscriber คุณต้องใช้พารามิเตอร์ บังคับ เพื่อรับสมาชิกกิจกรรมทั้งหมด รวมถึงสมาชิกที่ซ่อนอยู่

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

บ่งชี้ว่า cmdlet นี้รับสมาชิกเหตุการณ์ทั้งหมด รวมถึงสมาชิกสำหรับเหตุการณ์ที่ถูกซ่อนไว้โดยใช้พารามิเตอร์ SupportEvent ของ Register-ObjectEvent, Register-WmiEvent และ Register-EngineEvent

พิมพ์ :

SwitchParameter

ตำแหน่ง:

1

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-SourceIdentifier

ระบุค่าคุณสมบัติ SourceIdentifier ที่ได้รับเฉพาะสมาชิกเหตุการณ์เท่านั้น ตามค่าเริ่มต้น Get-EventSubscriber จะรับสมาชิกเหตุการณ์ทั้งหมดในเซสชัน ไม่อนุญาตให้ใช้ไวด์การ์ด พารามิเตอร์นี้จะคำนึงถึงขนาดตัวพิมพ์

พิมพ์ :

String

ตำแหน่ง:

0

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

True

ยอมรับอักขระตัวแทน:

False

-SubscriptionId

ระบุตัวระบุการสมัครสมาชิกที่ได้รับ cmdlet นี้ ตามค่าเริ่มต้น Get-EventSubscriber จะรับสมาชิกเหตุการณ์ทั้งหมดในเซสชัน

พิมพ์ :

Int32

นามแฝง :

Id

ตำแหน่ง:

0

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

True

ยอมรับอักขระตัวแทน:

False

อินพุต

ไม่มี

คุณไม่สามารถไปป์วัตถุกับ cmdlet นี้

เอาท์พุต

สมาชิก PSEvent

cmdlet นี้ส่งคืนออบเจ็กต์ PSEventSubscriber สำหรับผู้สมัครสมาชิกเหตุการณ์แต่ละราย

หมายเหตุ

New-Event cmdlet ซึ่งสร้างเหตุการณ์ที่กำหนดเอง ไม่ได้สร้างสมาชิก ดังนั้น cmdlet Get-EventSubscriber จะไม่พบวัตถุสมาชิกสำหรับเหตุการณ์เหล่านี้ อย่างไรก็ตาม หากคุณใช้ Register-Event cmdlet เพื่อสมัครรับเหตุการณ์ที่กำหนดเอง (เพื่อส่งต่อเหตุการณ์หรือเพื่อระบุการดำเนินการ) Get-EventSubscriber จะค้นหา สมาชิกที่ Register-EngineEvent สร้างขึ้น

กิจกรรม การสมัครสมาชิกกิจกรรม และคิวกิจกรรมมีอยู่ในเซสชันปัจจุบันเท่านั้น หากคุณปิดเซสชันปัจจุบัน คิวกิจกรรมจะถูกยกเลิกและการสมัครสมาชิกกิจกรรมจะถูกยกเลิก