|
|
Diposting pada 17/01/2017 17.05.59
|
|
|
|

Saya menggunakan objek .net WebClient untuk mengimplementasikan unduhan file,
Dan gunakan powershell untuk berlangganan peristiwa DownloadProgressChanged,
Memperbarui bilah kemajuan unduhan.
Peristiwa langganan menggunakan Register-ObjectEvent powershell, dan dokumen pendahuluannya adalah sebagai berikut:
Abstrak Berlangganan peristiwa yang dihasilkan oleh objek Microsoft .NET Framework.
tatabahasa Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward ] [-MaxTriggerCount <Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]
masukan Tidak ada Anda tidak dapat menyalurkan objek ke Register-ObjectEvent .
keluaran Sistem.Manajemen.Otomatisasi.PSEventJob Cmdlet ini tidak menghasilkan output apa pun.
Penafsiran * Peristiwa, langganan acara, dan antrean acara hanya ada di sesi saat ini. Jika Anda menutup sesi saat ini, antrean acara akan dibuang dan langganan acara dibatalkan.
contoh Contoh 1: Berlangganan peristiwa saat proses baru dimulai PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = $Query New-Object System.Management.ManagementEventWatcher PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
Contoh ini berlangganan peristiwa yang dihasilkan saat proses baru dimulai.
Perintah ini menggunakan objek ManagementEventWatcher untuk mendapatkan peristiwa EventArrived. Objek kueri menentukan bahwa peristiwa tersebut adalah peristiwa pembuatan instans untuk kelas Win32_Process. Contoh 2: Menentukan tindakan untuk merespons peristiwa PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query PS C:\>$Action = { New-Event "PowerShell.ProcessCreated" -Sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance } PS C:\>register-objectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action Nama ID Status HasMorePerintah Lokasi Data -- ---- ----- ----------- -------- ------- 2 422CFE5A-65E... Menjalankan Acara Baru Sejati "PowerShe...
Contoh ini menunjukkan cara menentukan tindakan untuk merespons suatu peristiwa. Saat Anda menentukan tindakan, peristiwa yang dimunculkan tidak ditambahkan ke antrean peristiwa. Sebaliknya, tindakan tersebut merespons peristiwa tersebut.
Dalam contoh ini, ketika peristiwa pembuatan instans dimunculkan yang menunjukkan bahwa proses baru dimulai, peristiwa ProcessCreated baru akan diangkat.
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 about_Jobs. Contoh 3: Berlangganan peristiwa objek di komputer jarak jauh PS C:\>$S = New-PSSession -ComputerName "Server01, Server02" PS C:\> Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1 PS C:\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = New-Object System.Management.WqlEventQuery "__ InstanceCreationEvent", ' (Rentang waktu objek baru 0,0,1), ' "TargetInstance isa 'Win32_Process'" $ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" register-objectEvent -input $ProcessWatcher -eventName "EventArrived" ' -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
Contoh ini menunjukkan cara berlangganan peristiwa objek di komputer jarak jauh.
Perintah pertama membuat PSSessions pada dua komputer jarak jauh dan menyimpannya dalam variabel $S.
Perintah kedua menggunakan parameter FilePath dari cmdlet Invoke-Command untuk menjalankan skrip ProcessCreationEvent.ps1 di masing-masing PSSessions di $S.
Skrip menyertakan perintah Register-ObjectEvent yang berlangganan peristiwa pembuatan instans pada objek Win32_Process melalui objek ManagementEventWatcher dan EventArrived-nya peristiwa. Contoh 4: Gunakan modul dinamis di objek PSEventJob PS C:\>$Timer = Pengatur Waktu Objek Baru.Pengatur Waktu PS C:\>$Timer.Interval = 500 PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100} PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob PS C:\>$Job | Format-List -Properti * Negara : Modul Berjalan: __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 Pesan Status : HasMoreData : Benar Lokasi : Perintah : $Random= Dapatkan-Acak -Min 0 -Maks 100 JobStateInfo : Berjalan Selesai : System.Threading.ManualResetEvent Instance ID : 88944290-133d-4b44-8752-f901bd8012e2 ID : 1 Nama : Timer.Random Pekerjaan Anak : {}... PS C:\>$Timer.Enabled = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
Contoh ini menunjukkan cara menggunakan modul dinamis dalam objek PSEventJob yang dibuat saat Anda menyertakan Tindakan dalam pendaftaran peristiwa.
Perintah pertama menggunakan cmdlet New-Object untuk membuat objek timer. Perintah kedua mengatur interval pengatur waktu menjadi 500 (milidetik).
Perintah ketiga menggunakan cmdlet Register-ObjectEvent untuk mendaftarkan peristiwa Elapsed dari objek timer. Perintah ini menyertakan tindakan yang menangani peristiwa tersebut. Setiap kali interval pengatur waktu berlalu, peristiwa dinaikkan dan perintah dalam tindakan berjalan. Dalam hal ini, cmdlet Get-Random menghasilkan angka acak antara 0 dan 100 dan menyimpannya di $Randomvariable.
Saat Anda menggunakan parameter Action dalam perintah Register-ObjectEvent, perintah mengembalikan objek PSEventJob yang mewakili tindakan. Perintah menyimpan objek pekerjaan dalam variabel $Job.
Objek PSEventJob yang dikembalikan cmdlet Register-ObjectEvent juga tersedia di properti Action pelanggan peristiwa. Untuk informasi selengkapnya, lihat Get-EventSubscriber.
Perintah keempat menunjukkan bahwa variabel $Job berisi objek PSEventJob. Perintah kelima menggunakan cmdlet Format-List untuk menampilkan semua properti objek PSEventJob dalam daftar.
PSEventJob memiliki properti Modul yang berisi modul skrip dinamis yang mengimplementasikan tindakan.
Perintah keenam mengaktifkan timer.
Perintah yang tersisa menggunakan operator panggilan (&) untuk memanggil perintah dalam modul dan menampilkan nilai variabel $Random. Anda dapat menggunakan operator panggilan untuk memanggil perintah apa pun dalam modul, termasuk perintah yang tidak diekspor. Dalam hal ini, perintah menunjukkan nomor acak yang dihasilkan saat peristiwa Elapsed terjadi.
Untuk informasi selengkapnya tentang modul, lihat about_Modules.
Tautan Terkait Versi Online: http://go.microsoft.com/fwlink/?LinkId=821845 Dapatkan Acara Acara Baru Daftar-EngineEvent Daftar-WmiEvent Hapus-Peristiwa Batalkan Pendaftaran-Acara Acara Tunggu Terakhir, lampirkan kode sumber PS:
Wisatawan, jika Anda ingin melihat konten tersembunyi dari posting ini, silakan Jawab
|
Mantan:Metode PowerShell untuk komentar satu baris, komentar multi-baris, dan komentar blokDepan:PowerShell menggunakan WebClient untuk mengunduh file
|