Register-EngineEvent
Berlangganan peristiwa yang dihasilkan oleh mesin PowerShell dan oleh cmdlet New-Event.
Sintaks
Default (Default)
Register-EngineEvent
[-SourceIdentifier] <String>
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Deskripsi
Cmdlet Register-EngineEvent berlangganan peristiwa yang dihasilkan oleh mesin PowerShell dan cmdlet New-Event. Gunakan parameter SourceIdentifier untuk menentukan peristiwa.
Anda dapat menggunakan cmdlet ini untuk berlangganan
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.
Ketika acara langganan diaktifkan, itu ditambahkan ke antrean acara di sesi Anda. Untuk mendapatkan acara dalam antrian acara, gunakan cmdlet Get-Event.
Contoh
Contoh 1: Mendaftarkan peristiwa mesin pemrosesan PowerShell di komputer jarak jauh
Contoh ini mendaftarkan event engine PowerShell di dua komputer jarak jauh.
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S {
Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PSEngineEvent]::Exiting) -Forward
}
New-PSSession membuat sesi yang dikelola pengguna (PSSession) di setiap komputer jarak jauh. Cmdlet Invoke-Command menjalankan perintah Register-EngineEvent dalam sesi jarak jauh.
Contoh 2: Ambil tindakan tertentu saat peristiwa Keluar terjadi
Contoh ini memperlihatkan cara menjalankan Register-EngineEvent untuk mengambil tindakan tertentu saat peristiwa PowerShell.Keluar dari terjadi.
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
Get-History | Export-Clixml $HOME\history.clixml
}
Parameter SupportEvent ditambahkan untuk menyembunyikan langganan event. Saat PowerShell keluar, dalam hal ini, riwayat perintah dari sesi keluar diekspor file XML di direktori $HOME pengguna.
Contoh 3: Membuat dan berlangganan peristiwa yang ditentukan pengguna
Contoh ini membuat langganan untuk acara dari sumber MyEventSource. Ini adalah sumber sewenang-wenang yang akan kita gunakan untuk memantau kemajuan pekerjaan.
Register-EngineEvent digunakan untuk membuat langganan. Blokir skrip untuk parameter Tindakan mencatat data peristiwa ke file teks.
Register-EngineEvent -SourceIdentifier MyEventSource -Action {
"Event: {0}" -f $Event.MessageData | Out-File C:\temp\MyEvents.txt -Append
}
Start-Job -Name TestJob -ScriptBlock {
while ($true) {
Register-EngineEvent -SourceIdentifier MyEventSource -Forward
Start-Sleep -Seconds 2
"Doing some work..."
$newEventSplat = @{
SourceIdentifier = 'MyEventSource'
MessageData = ("{0} - Work done..." -f (Get-Date))
}
New-Event @newEventSplat
}
}
Start-Sleep -Seconds 4
Get-EventSubscriber
Get-Job
SubscriptionId : 12
SourceObject :
EventName :
SourceIdentifier : MyEventSource
Action : System.Management.Automation.PSEventJob
HandlerDelegate :
SupportEvent : False
ForwardEvent : False
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
18 MyEventSource Running True …
19 TestJob BackgroundJob Running True localhost …
Register-EngineEvent membuat Id Pekerjaan 18.
Start-Job membuat Id Pekerjaan 19. Di Contoh #4, kami menghapus langganan peristiwa dan pekerjaan, lalu memeriksa file log.
Contoh 4: Membatalkan pendaftaran acara dan menyelesaikan pekerjaan
Ini adalah kelanjutan dari Contoh 3. Dalam contoh ini kita menunggu selama 10 detik untuk membiarkan beberapa peristiwa terjadi. Kemudian kami mencabut langganan acara.
PS> Start-Sleep -Seconds 10
PS> Get-EventSubscriber | Unregister-Event
PS> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
18 MyEventSource Stopped False …
19 TestJob BackgroundJob Running True localhost …
PS> Stop-Job -Id 19
PS> Get-Job | Remove-Job
PS> Get-Content C:\temp\MyEvents.txt
Event: 2/18/2020 2:36:19 PM - Work done...
Event: 2/18/2020 2:36:21 PM - Work done...
Event: 2/18/2020 2:36:23 PM - Work done...
Event: 2/18/2020 2:36:25 PM - Work done...
Event: 2/18/2020 2:36:27 PM - Work done...
Event: 2/18/2020 2:36:29 PM - Work done...
Event: 2/18/2020 2:36:31 PM - Work done...
cmdlet Unregister-Event menghentikan tugas yang terkait dengan langganan acara (Id Tugas 18). Job Id 19 masih berjalan dan membuat peristiwa baru. Kami menggunakan cmdlet untuk menghentikan pekerjaan dan menghapus objek pekerjaan yang tidak diperlukan.
Get-Content menampilkan isi file log.
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 dapat mencakup $Eventvariabel , , $EventSubscriber$Sender, $EventArgs, dan $args otomatis, yang memberikan informasi tentang peristiwa ke blok skrip Tindakan. Untuk informasi selengkapnya, lihat tentang_Variabel_Automatis.
Ketika Anda menentukan suatu tindakan, Register-EngineEvent 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 |
-Forward
Menunjukkan bahwa cmdlet mengirim event untuk langganan ini ke sesi pada komputer lokal. 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 |
-MaxTriggerCount
Menentukan jumlah maksimum berapa kali tindakan dijalankan untuk langganan peristiwa.
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
Parameter ini adalah bagian dari kelas dasar untuk semua event cmdlet.
Register-EngineEvent tidak menggunakan parameter ini. Setiap data yang diteruskan ke parameter ini diabaikan.
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 pengidentifikasi sumber peristiwa tempat Anda berlangganan. Pengidentifikasi sumber harus unik dalam sesi saat ini. Parameter ini diperlukan.
Nilai parameter ini terlihat dalam nilai properti SourceIdentifier dari objek pelanggan dan semua objek peristiwa yang terkait dengan langganan ini.
Nilai ini spesifik pada sumber peristiwa. Ini bisa menjadi nilai arbitrer yang Anda buat untuk digunakan dengan cmdlet New-Event. Mesin PowerShell mendukung PSEngineEvent dengan nilai-nilai PowerShell.Exiting dan PowerShell.OnIdle.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | 100 |
| Wajib: | True |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-SupportEvent
Menunjukkan bahwa cmdlet menyembunyikan langganan acara. Tambahkan 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, tambahkan parameter Force ke cmdlet Get-EventSubscriber atau Unregister-Event.
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.
Saat berlangganan pada acara Exiting, cmdlet yang dapat dieksekusi oleh parameter Action terbatas pada cmdlet dalam modul Microsoft.PowerShell.Core dan Microsoft.PowerShell.Utility. Peristiwa Exiting hanya dijalankan ketika sesi dihentikan di bawah kendali PowerShell. Peristiwa tidak dipicu ketika aplikasi host atau jendela terminal ditutup.
Mesin dianggap diam jika tidak menjalankan saluran pipa. Peristiwa OnIdle diaktifkan ketika PowerShell menjadi tidak aktif selama 300 milidetik (ms).
Nota
Saat PSReadLine digunakan, peristiwa OnIdle diaktifkan ketika ReadKey() mengalami waktu habis (tidak ada pengetikan dalam 300ms). Peristiwa dapat disinyalir saat pengguna berada di tengah-tengah pengeditan baris perintah, misalnya, pengguna membaca bantuan untuk memutuskan parameter mana yang akan digunakan. Dimulai di PSReadLine 2.2.0-beta4, perilaku OnIdle berubah untuk memberi sinyal peristiwa hanya jika ada batas waktu ReadKey() dan buffer pengeditan saat ini kosong.