Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 10956|Respuesta: 3

PowerShell llama a .net y se suscribe a eventos [código fuente]

[Copiar enlace]
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 favorRespuesta





Anterior:Métodos PowerShell para comentarios de una sola línea, comentarios de varias líneas y comentarios de bloque
Próximo:PowerShell utiliza el WebClient para descargar archivos
Publicado en 26/4/2017 14:35:44 |
132432423432423
Publicado en 16/4/2019 17:14:12 |
2222222222222
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com