รับ-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 สร้างขึ้น
กิจกรรม การสมัครสมาชิกกิจกรรม และคิวกิจกรรมมีอยู่ในเซสชันปัจจุบันเท่านั้น หากคุณปิดเซสชันปัจจุบัน คิวกิจกรรมจะถูกยกเลิกและการสมัครสมาชิกกิจกรรมจะถูกยกเลิก