Register-ObjectEvent
Berlangganan ke peristiwa yang dihasilkan oleh objek Microsoft .NET Framework.
Sintaks
Default (Default)
Register-ObjectEvent
[-InputObject] <PSObject>
[-EventName] <String>
[[-SourceIdentifier] <String>]
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Deskripsi
cmdlet Register-ObjectEvent berlangganan peristiwa yang dihasilkan oleh objek .NET di komputer lokal atau di komputer jarak jauh.
Ketika acara langganan diaktifkan, itu ditambahkan ke antrean acara di sesi Anda. Untuk mendapatkan acara dalam antrian acara, gunakan cmdlet Get-Event.
Anda dapat menggunakan parameter Register-ObjectEvent untuk menentukan nilai properti peristiwa yang dapat membantu Anda mengidentifikasi peristiwa dalam antrean. Anda juga dapat menggunakan parameter Tindakan
Saat Anda berlangganan acara, pendaftar acara ditambahkan ke dalam sesi Anda. Untuk mendapatkan pendaftar acara dalam sesi, gunakan cmdlet Get-EventSubscriber. Untuk membatalkan langganan, gunakan cmdlet Unregister-Event, yang menghapus subskriptor acara dari sesi.
Contoh
Contoh 1: Berlangganan peristiwa saat proses baru dimulai
Contoh ini berlangganan peristiwa yang dihasilkan saat proses baru dimulai.
Perintah menggunakan objek
$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
Contoh 2: Tentukan tindakan untuk merespons peristiwa
Saat Anda menentukan tindakan, peristiwa yang dinaikkan tidak ditambahkan ke antrean peristiwa. Sebagai gantinya, tindakan merespons peristiwa tersebut. Dalam contoh ini, ketika peristiwa pembuatan instans dinaikkan yang menunjukkan bahwa proses baru dimulai, peristiwa ProcessCreated baru akan dinaikkan.
$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query
$newEventArgs = @{
SourceIdentifier = 'PowerShell.ProcessCreated'
Sender = $Sender
EventArguments = $EventArgs.NewEvent.TargetInstance
}
$Action = { New-Event @newEventArgs }
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 3db2d67a-efff-... NotStarted False New-Event @newEventArgs
Tindakan ini menggunakan variabel otomatis $Sender dan $EventArgs yang hanya diisi untuk tindakan peristiwa.
Perintah Register-ObjectEvent mengembalikan objek pekerjaan yang mewakili tindakan, yang berjalan sebagai pekerjaan latar belakang. Anda dapat menggunakan cmdlet Pekerjaan, seperti Get-Job dan Receive-Job, untuk mengelola pekerjaan latar belakang. Untuk informasi selengkapnya, lihat tentang_Pekerjaan.
Contoh 3: Berlangganan peristiwa objek di komputer jarak jauh
Contoh ini menunjukkan cara berlangganan peristiwa objek di komputer jarak jauh. Contoh ini menggunakan fungsi Enable-ProcessCreationEvent yang ditentukan dalam file skrip ProcessCreationEvent.ps1. Skrip ini tersedia untuk semua komputer dalam contoh.
# ProcessCreationEvent.ps1
function Enable-ProcessCreationEvent {
$queryParameters = "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$objectEventArgs = @{
Input = New-Object System.Management.ManagementEventWatcher $Query
EventName = 'EventArrived'
SourceIdentifier = 'WMI.ProcessCreated'
MessageData = 'Test'
Forward = $true
}
Register-ObjectEvent @objectEventArgs
}
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1
Invoke-Command -Session $S { Enable-ProcessCreationEvent }
Yang pertama kita membuat PSSessions pada dua komputer jarak jauh dan menyimpannya dalam variabel $S. Selanjutnya, cmdlet Invoke-Command menjalankan skrip ProcessCreationEvent.ps1 di masing-masing PSSessions di $S. Tindakan ini membuat fungsi Enable-ProcessCreationEvent dalam sesi jarak jauh.
Terakhir, kita menjalankan fungsi Enable-ProcessCreationEvent dalam sesi jarak jauh.
Fungsi ini mencakup perintah
Contoh 4: Gunakan modul dinamis di objek PSEventJob
Contoh ini menunjukkan cara menggunakan modul dinamis di objek PSEventJob
Setiap kali interval timer berlalu, peristiwa dinaikkan dan tindakan dijalankan. Dalam hal ini, cmdlet Get-Random menghasilkan angka acak antara 0 dan 100 dan menyimpannya dalam variabel $Random.
$Timer = New-Object Timers.Timer
$Timer.Interval = 500
$Timer.Enabled = $true
$objectEventArgs = @{
InputObject = $Timer
EventName = 'Elapsed'
SourceIdentifier = 'Timer.Random'
Action = {$Random = Get-Random -Min 0 -Max 100}
}
$Job = Register-ObjectEvent @objectEventArgs
$Job | Format-List -Property *
& $Job.Module {$Random}
& $Job.Module {$Random}
State : Running
Module : __DynamicModule_53113769-31f2-42dc-830b-8749325e28d6
StatusMessage :
HasMoreData : True
Location :
Command : $Random = Get-Random -Min 0 -Max 100
JobStateInfo : Running
Finished : System.Threading.ManualResetEvent
InstanceId : 47b5ec9f-bfe3-4605-860a-4674e5d44ca8
Id : 7
Name : Timer.Random
ChildJobs : {}
PSBeginTime : 6/27/2019 10:19:06 AM
PSEndTime :
PSJobTypeName :
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
Information : {}
60
47
&), kami memanggil perintah dalam modul untuk menampilkan nilai variabel $Random.
Untuk informasi selengkapnya tentang modul, lihat about_Modules.
Parameter
-Action
Menentukan perintah untuk menangani peristiwa. Perintah dalam Tindakan dijalankan saat peristiwa diaktifkan, alih-alih mengirim peristiwa tersebut ke antrean peristiwa. Sertakan perintah dalam kurung kurawal ({}) untuk membuat blokir skrip.
Nilai parameter Tindakan
Ketika Anda menentukan suatu tindakan, Register-ObjectEvent akan mengembalikan objek tugas acara yang mewakili tindakan tersebut. Anda dapat menggunakan Job cmdlets untuk mengelola job acara.
Properti parameter
| Jenis: | ScriptBlock |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | 101 |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-EventName
Menentukan peristiwa yang Anda berlangganan.
Nilai parameter ini harus berupa nama peristiwa yang diekspos objek .NET. Misalnya, kelas Get-Member.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | 1 |
| Wajib: | True |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Forward
Menunjukkan bahwa cmdlet mengirim peristiwa untuk langganan ini ke sesi jarak jauh. Gunakan parameter ini saat Anda mendaftar untuk peristiwa di komputer jarak jauh atau dalam sesi jarak jauh.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-InputObject
Menentukan objek .NET yang menghasilkan peristiwa. Masukkan variabel yang berisi objek , atau ketik perintah atau ekspresi yang mendapatkan objek .
Properti parameter
| Jenis: | PSObject |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | 0 |
| Wajib: | True |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-MaxTriggerCount
Menentukan berapa kali peristiwa dapat dipicu.
Properti parameter
| Jenis: | Int32 |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-MessageData
Menentukan data tambahan apa pun yang akan dikaitkan dengan langganan peristiwa ini. Nilai parameter ini muncul di properti MessageData dari semua peristiwa yang terkait dengan langganan ini.
Properti parameter
| Jenis: | PSObject |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-SourceIdentifier
Menentukan nama yang Anda pilih untuk langganan. Nama yang Anda pilih harus unik dalam sesi saat ini. Nilai default adalah GUID yang ditetapkan PowerShell.
Nilai parameter ini muncul dalam nilai properti SourceIdentifier objek pelanggan dan semua objek peristiwa yang terkait dengan langganan ini.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | 100 |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-SupportEvent
Menunjukkan bahwa cmdlet menyembunyikan langganan acara. Gunakan parameter ini ketika langganan saat ini adalah bagian dari mekanisme pendaftaran peristiwa yang lebih kompleks dan tidak boleh ditemukan secara independen.
Untuk melihat atau membatalkan langganan yang dibuat dengan parameter SupportEvent
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
CommonParameters
Cmdlet ini mendukung parameter umum: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, dan -WarningVariable. Untuk informasi selengkapnya, lihat about_CommonParameters.
Input
None
Anda tidak dapat menyalurkan objek ke cmdlet ini.
Output
None
Secara default, cmdlet ini tidak mengembalikan output.
PSEventJob
Saat Anda menggunakan parameter Tindakan
Catatan
Peristiwa, langganan peristiwa, dan antrean peristiwa hanya ada di sesi saat ini. Jika Anda menutup sesi saat ini, antrian peristiwa akan dibuang dan langganan peristiwa dibatalkan.