Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 10956|Risposta: 3

PowerShell chiama .net e si abbona agli eventi [codice sorgente]

[Copiato link]
Pubblicato su 17/01/2017 17:05:59 | | | |


Uso l'oggetto .net WebClient per implementare il download del file,

E usa powershell per iscriverti all'evento DownloadProgressChanged,

Ho aggiornato la barra dei progressi del download.

L'evento di abbonamento utilizza Register-ObjectEvent di powershell, e il documento introduttivo è il seguente:

Astratto
    Si abbona agli eventi generati da un oggetto Microsoft .NET Framework.

grammatica
    Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Azione] <ScriptBlock>[-Inoltrare] [-MaxTriggerCount <Int32>] [-MessageData <PSObject>] [-SupportEvent] [<CommonParameters>]


immissione
    Nessuna
    Non puoi canalizzare oggetti verso Register-ObjectEvent .

Output
    System.Management.Automation.PSEventJob
    Questo cmdlet non genera alcun output.

esegesi
    * Eventi, abbonamenti agli eventi e la coda degli eventi esistono solo nella sessione corrente. Se chiudi la sessione attuale, la coda degli eventi viene scartata e l'abbonamento all'evento viene annullato.
   

esempio
    Esempio 1: Iscriviti agli eventi quando inizia un nuovo processo
    PS C:\>$Query = Nuovo Oggetto System.Management.WqlEventQuery "__InstanceCreationEvent", (Nuovo Oggetto TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = Sistema Nuovo Oggetto.Management.ManagementEventWatcher $Query
    PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
   
    Questo esempio si abscrive agli eventi generati quando inizia un nuovo processo.

Il comando utilizza l'oggetto ManagementEventWatcher per ottenere gli eventi EventArrived. Un oggetto query specifica che gli eventi sono eventi di creazione di istanza per la classe Win32_Process.
    Esempio 2: Specificare un'azione per rispondere a un evento
    PS C:\>$Query = Nuovo Oggetto System.Management.WqlEventQuery "__InstanceCreationEvent", (Nuovo Oggetto TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = Nuovo Sistema Oggetto.Management.ManagementEventWatcher $query
    PS C:\>$Action = { New-Event "PowerShell.ProcessCreated" -Mittente $Sender -EventArguments $EventArgs.NewEvent.TargetInstance }
    PS C:\>register-objectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action
    Comando Id Name State HasMoreData Location
    --    ----            -----      -----------     --------             -------
    2 422cfE5A-65E... Running True New-Event "PowerShe...
   
    Questo esempio mostra come specificare un'azione per rispondere a un evento. Quando specifichi un'azione, gli eventi che vengono generati non vengono aggiunti alla coda degli eventi. Invece, l'azione risponde all'evento.

In questo esempio, quando viene avviato un evento di creazione di istanza che indica l'avvio di un nuovo processo, viene generato un nuovo evento ProcessCreed.

L'azione utilizza le variabili automatiche $Sender e $EventArgs che vengono popolate solo per le azioni evento.

Il comando Register-ObjectEvent restituisce un oggetto di lavoro che rappresenta l'azione, che viene eseguita come lavoro in background. Puoi usare i comandanti Job, come Get-Job e Receive-Job, per gestire il lavoro in background.

Per maggiori informazioni, vedi about_Jobs.
    Esempio 3: Iscriversi agli eventi oggetto su computer remoti
    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", '
       (SpazioTemporale Nuovo Oggetto 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
   
    Questo esempio mostra come abbonarsi agli eventi oggetto su computer remoti.

Il primo comando crea PSSession su due computer remoti e li salva nella variabile $S.

Il secondo comando utilizza il parametro FilePath del cmdlet Invoke-Command per eseguire lo script ProcessCreationEvent.ps1 in ciascuno dei PSSession in $S.

Lo script include un comando Register-ObjectEvent che si abscrive agli eventi di creazione di istanze sull'oggetto Win32_Process tramite l'oggetto ManagementEventWatcher e il suo EventArrived evento.
    Esempio 4: Usa il modulo dinamico nell'oggetto PSEventJob
    PS C:\>$Timer = Timer per nuovi oggetti. Timer
    PS C:\>$Timer.Intervallo = 500
    PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventoName Scorso -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100}
    PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob
    PS C:\>$Job | Format-List -proprietà *
    Stato:
    RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    MessaggioStato:
    HasMoreData : Vero
    Posizione:
    Comando : $Random= Get-Random -Min 0 -Max 100
    JobStateInfo : In corsa
    Completato : System.Threading.ManualResetEvent
    InstanceId : 88944290-133d-4b44-8752-f901bd8012e2
    ID : 1
    Nome: Timer.Random
    ChildJobs : {}... PS C:\>$Timer.Abilitato = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Questo esempio mostra come utilizzare il modulo dinamico nell'oggetto PSEventJob che viene creato quando si include un'Azione nella registrazione di un evento.

Il primo comando utilizza il cmdlet New-Object per creare un oggetto timer. Il secondo comando imposta l'intervallo del timer a 500 (millisecondi).

Il terzo comando utilizza il cmdlet Register-ObjectEvent per registrare l'evento Elapsed dell'oggetto timer. Il comando include un'azione che gestisce l'evento. Ogni volta che l'intervallo del timer scade, viene attivato un evento e i comandi dell'azione si attivano. In questo caso, il cmdlet Get-Random genera un numero casuale tra 0 e 100 e lo salva nel $Randomvariable.

Quando usi un parametro Action in un comando Register-ObjectEvent, il comando restituisce un oggetto PSEventJob che rappresenta l'azione. Il comando salva l'oggetto lavoro nella variabile $Job.

L'oggetto PSEventJob restituito dal cmdlet Register-ObjectEvent è anch'esso disponibile nella proprietà Action dell'abbonato all'evento. Per maggiori informazioni, vedi Get-EventSubscriber.

Il quarto comando mostra che la variabile $Job contiene un oggetto PSEventJob. Il quinto comando utilizza il cmdlet Format-List per visualizzare tutte le proprietà dell'oggetto PSEventJob in una lista.

Il PSEventJob ha una proprietà Module che contiene un modulo script dinamico che implementa l'azione.

Il sesto comando attiva il timer.

I restanti comandi utilizzano l'operatore di chiamata (&) per invocare il comando nel modulo e visualizzare il valore della variabile $Random. Puoi usare l'operatore di chiamata per evocare qualsiasi comando in un modulo, inclusi i comandi che non vengono esportati. In questo caso, i comandi mostrano il numero casuale generato quando si verifica l'evento Elapsed.

Per maggiori informazioni sui moduli, vedi about_Modules.


CollegatiCorrelati
    Versione online: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Nuovo evento
    EventoRegistromotore
    Registrati-WmiEvento
    Remove-Event
    Unregister-Event
    Evento di attesa

Infine, allega il codice sorgente PS:

Turisti, se volete vedere il contenuto nascosto di questo post, vi pregoRisposta





Precedente:Metodi PowerShell per commenti a una riga, commenti multirighe e commenti a blocchi
Prossimo:PowerShell utilizza il WebClient per scaricare file
Pubblicato su 26/04/2017 14:35:44 |
132432423432423
Pubblicato su 16/04/2019 17:14:12 |
2222222222222
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com