Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 10956|Jawab: 3

PowerShell memanggil .net dan berlangganan peristiwa [kode sumber]

[Salin tautan]
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, silakanJawab





Mantan:Metode PowerShell untuk komentar satu baris, komentar multi-baris, dan komentar blok
Depan:PowerShell menggunakan WebClient untuk mengunduh file
Diposting pada 26/04/2017 14.35.44 |
132432423432423
Diposting pada 16/04/2019 17.14.12 |
2222222222222
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com