|
|
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 prego Risposta
|
Precedente:Metodi PowerShell per commenti a una riga, commenti multirighe e commenti a blocchiProssimo:PowerShell utilizza il WebClient per scaricare file
|