|
|
Publicado en 17/1/2017 17:05:59
|
|
|
|

Utilizo el objeto .net WebClient para implementar la descarga del archivo,
Y usa powershell para suscribirte al evento DownloadProgressChanged,
Actualizé la barra de progreso de descarga.
El evento de suscripción utiliza Register-ObjectEvent de powershell, y el documento de introducción es el siguiente:
Resumen Se suscribe a los eventos generados por un objeto Microsoft .NET Framework.
gramática Registrar-ObjetoEvento [-InputObject] <PSObject> [-NombreDeEvento] <String> [[-IdentificadorFuente] <String>] [[-Acción] <ScriptBlock>] [-Reenviar] [-ConteoDisparoMáxico<Int32>] [-MensajeData<PSObject>] ] [-EventoDeApoyo] [<CommonParameters>]
entrada Ninguno No puedes canalizar objetos a Register-ObjectEvent .
Producción System.Management.Automation.PSEventJob Este cmdlet no genera ninguna salida.
exégesis * Los eventos, suscripciones a eventos y la cola de eventos existen solo en la sesión actual. Si cierras la sesión actual, la cola de eventos se descarta y la suscripción al evento se cancela.
ejemplo Ejemplo 1: Suscribirse a eventos cuando comienza un nuevo proceso PS C:\>$Query = System-Nuevo-Objeto.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = Sistema de Nuevos Objetos.Management.ManagementEventWatcher $Query PD C:\>Registrar-ObjetoEvento -InputObject $ProcessWatcher -EventoNombre "EventoLlegado"
Este ejemplo se suscribe a los eventos generados cuando comienza un nuevo proceso.
El comando utiliza el objeto ManagementEventWatcher para obtener eventos EventArrived. Un objeto de consulta especifica que los eventos son eventos de creación de instancias para la clase Win32_Process. Ejemplo 2: Especificar una acción para responder a un evento PS C:\>$Query = System-Nuevo-Objeto.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = Sistema de Nuevos Objetos.Management.ManagementEventWatcher $query PD C:\>$Action = { New-Event "PowerShell.ProcessCreated" -Sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance } PD C:\\>register-objectEvent -InputObject $ProcessWatcher -EventoName "EventArrived" -Action $Action Comando Id Name State HasMoreData Location -- ---- ----- ----------- -------- ------- 2 422cFe5A-65E... Running True New-Event "PowerShe...
Este ejemplo muestra cómo especificar una acción para responder a un evento. Cuando especificas una acción, los eventos que se generan no se añaden a la cola de eventos. En cambio, la acción responde al evento.
En este ejemplo, cuando se genera un evento de creación de instancia que indica que se ha iniciado un nuevo proceso, se genera un nuevo evento ProcesCreado.
La acción utiliza las variables automáticas $Sender y $EventArgs que solo se rellenan para acciones de eventos.
El comando Register-ObjectEvent devuelve un objeto de trabajo que representa la acción, que se ejecuta como un trabajo en segundo plano. Puedes usar los comandos de Trabajo, como Obtendre-Trabajo y Recibir-Trabajo, para gestionar el trabajo en segundo plano.
Para más información, véase about_Jobs. Ejemplo 3: Suscribirse a eventos objeto en ordenadores remotos PS C:\>$S = New-PSSession -Nombreordenador "Server01, Server02" PD 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", ' (Nuevo Objeto EspacioTiempo 0,0,1), ' "TargetInstance isa 'Win32_Process'" $ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcesoCreato" Registro-ObjetoEvento -Entrada $ProcessWatcher -Nombre del Evento "EventoLlegado" ' -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
Este ejemplo muestra cómo suscribirse a eventos objeto en ordenadores remotos.
El primer comando crea PSSessions en dos ordenadores remotos y los guarda en la variable $S.
El segundo comando utiliza el parámetro FilePath del cmdlet Invoke-Command para ejecutar el script ProcessCreationEvent.ps1 en cada uno de los PSSessions en $S.
El script incluye un comando Register-ObjectEvent que suscribe los eventos de creación de instancias en el objeto Win32_Process a través del objeto ManagementEventWatcher y su EventArrived evento. Ejemplo 4: Usa el módulo dinámico en el objeto PSEventJob PS C:\>$Timer = Temporizadores de Nuevo Objeto. Temporizador PD: C:\>$Timer.Intervalo = 500 PD C:\>$Job = Registrar-ObjetoEvento -InputObject $Timer -NombreEventoElapsed -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100} PD C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob PD: C:\>$Job | Format-List -Propiedad * Estado: RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 Mensaje de Estado: HasMoreData : Cierto Ubicación: Comando : $Random= Get-Random -Min 0 -Max 100 JobStateInfo : En marcha Terminado : System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 Id : 1 Nombre: Timer.Random ChildJobs : {}... PD: C:\>$Timer.Habilitado = $True PD C:\>& $Job.module {$Random}60 PD: C:\>& $Job.module {$Random}47
Este ejemplo muestra cómo usar el módulo dinámico en el objeto PSEventJob que se crea cuando se incluye una Acción en el registro de un evento.
El primer comando utiliza el cmdlet Nuevo-Objeto para crear un objeto temporizador. El segundo comando establece el intervalo del temporizador en 500 (milisegundos).
El tercer comando utiliza el cmdlet Register-ObjectEvent para registrar el evento Elapsed del objeto temporizador. El comando incluye una acción que gestiona el evento. Cada vez que transcurre el intervalo de temporizador, se activa un evento y se ejecutan los comandos de la acción. En este caso, el cmdlet Get-Random genera un número aleatorio entre 0 y 100 y lo guarda en el $Randomvariable.
Cuando usas un parámetro de Acción en un comando Register-ObjectEvent, el comando devuelve un objeto PSEventJob que representa la acción. El comando guarda el objeto de trabajo en la variable $Job.
El objeto PSEventJob que devuelve el cmdlet Register-ObjectEvent también está disponible en la propiedad Action del suscriptor del evento. Para más información, consulta Get-EventSubscriber.
El cuarto comando muestra que la variable $Job contiene un objeto PSEventJob. El quinto comando utiliza el cmdlet Format-List para mostrar todas las propiedades del objeto PSEventJob en una lista.
El PSEventJob tiene una propiedad de módulo que contiene un módulo de script dinámico que implementa la acción.
El sexto comando activa el temporizador.
Los comandos restantes utilizan el operador de llamada (&) para invocar el comando en el módulo y mostrar el valor de la variable $Random. Puedes usar el operador de llamada para invocar cualquier comando en un módulo, incluyendo comandos que no se exporten. En este caso, los comandos muestran el número aleatorio que se está generando cuando ocurre el evento de Elapsed.
Para más información sobre los módulos, véase about_Modules.
Enlaces relacionados Versión online: http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Nuevo evento Register-EngineEvent Registrar-WmiEvent Remove-Event Evento de desregistro Evento de espera Finalmente, adjunta el código fuente de PS:
Turistas, si queréis ver el contenido oculto de esta publicación, por favor Respuesta
|
Anterior:Métodos PowerShell para comentarios de una sola línea, comentarios de varias líneas y comentarios de bloquePróximo:PowerShell utiliza el WebClient para descargar archivos
|