PowerShell: Monitor de Velocidad de la CPU: WMI Eventing
Publicado por Sullivan Trevor en 2011/01/17
Rate This
Introducción
No he escrito ningún artículo en cuando, y las cosas importantes última vez que había estado trabajando con los involucrados WMI suscripciones a eventos permanentes. He estado con ganas de escribir un artículo como este desde hace un tiempo, pero igual nunca se había llegado en torno a ella. El propósito de este artículo es describir cómo utilizar PowerShell con WMI de eventos para controlar los cambios en la velocidad de la CPU. A diferencia de las CPUs de primera generación, las CPUs modernas han incorporado tecnología que puede cambiar dinámicamente la velocidad de reloj del procesador depende de la carga (por ejemplo, Intel SpeedStep o Cool 'n silenciosa de AMD ).
WMI Eventos
Afortunadamente, Windows Management Instrumentation (WMI), integrado en Microsoft Windows, ofrece información sobre la velocidad de la CPU, así como el caso de algunos antecedentes sobre temporales suscripciones a eventos WMI con PowerShell, echa un vistazo a mi artículo sobre eventos de WMI . Si usted está interesado en suscripciones a eventos permanentes, que no dependen de la PowerShell se ejecuta en segundo plano, echa un vistazo a la PowerShell módulo PowerEvents .
Temporal: Velocidad de supervisión de la CPU
Uso de una suscripción de eventos temporales, que pueden controlar fácilmente la velocidad de la CPU ejecutando el siguiente comando de PowerShell:
Register-WmiEvent –Query "select * from __InstanceModificationEvent within 2 where TargetInstance ISA 'Win32_Processor'
Esto simplemente se hacen eco de texto " velocidad de reloj cambiado, "en cada ocurrencia, a la consola de PowerShell. Si quieres hacer algo más de fantasía, que puede recuperar de forma dinámica la velocidad de reloj de nuevo el objeto de evento en el bloque de Acción.
Register-WmiEvent –Query "select * from __InstanceModificationEvent within 2 where TargetInstance ISA 'Win32_Processor
Para hacer las cosas aún más dinámico, se puede configurar una función de PowerShell para responder a nuestro evento, y luego llamar a esa función en el controlador de eventos. Al hacer esto, ahora nos permite la flexibilidad de la redefinición de la función de controlador de eventos, sin tener que borrar y volver a crear el registro de eventos.
function ClockSpeedChanged($tEvent)
{
Write-Host $tEvent.SourceEventArgs.NewEvent.TargetInstance.CurrentClockSpeed
}
Register-WmiEvent –Query "select * from __InstanceModificationEvent within 2 where TargetInstance ISA 'Win32_Processor' and
Permanente: Velocidad de supervisión de la CPU
Así pues, ahora hemos visto cómo crear un registro de eventos temporales para controlar la velocidad de la CPU, pero esto depende de tener PowerShell.exe funcionando todo el tiempo. ¿Qué pasa si queremos realizar alguna acción en respuesta a la cambiante velocidad de la CPU, pero no tiene que preocuparse de la invocación, y dejando, una sesión de PowerShell? Aquí es donde el poder permanente de suscripciones a eventos WMI entra en juego. El módulo de PowerEvents para PowerShell hace que estas muy fácil trabajar con ellos.
Para recapitular sobre los consumidores de eventos permanentes, es necesario crear tres objetos:
- Un filtro que define los eventos que estamos agarrando / respuesta a
- Un consumidor que define la acción que se adoptarán en respuesta a los casos de eventos
- Un enlace que se une un filtro a un consumidor, y permite el flujo de eventos
En primer lugar, tenemos que crear un objeto de filtro. Filtros de WMI son simplemente objetos que definen los eventos que desea capturar y responder. La acción de hecho de responder es manejado por un objeto diferente, llamada de los consumidores. Esto es lo que nuestro filtro se vería así:
$Filter = New-WmiEventFilter –Name CPUClockSpeedChanged –Query "select * from __InstanceModificationEvent within 2 where Tar
A continuación, tenemos que crear un consumidor de eventos de WMI. El propósito del consumidor es responder a los eventos definidos en nuestro filtro. Digamos que en este caso, que desea registrar simplemente el cambio de velocidad de reloj a un archivo de texto:
$Consumer = New-WmiEventConsumer -Name CPUClockSpeedChanged -ConsumerType LogFile -FileName c:\temp\ClockSpeed.log -Tex
Nota : Para el ejemplo anterior, asegúrese de que la carpeta c: \ temp existe, de lo contrario no se creará. El consumidor sólo creará el archivo de texto, si no existe.
Por último, se crea un enlace entre el filtro y el consumidor:
New-WmiFilterToConsumerBinding -Filter $Filter -Consumer $Consumer
Y eso es todo lo que hay! Ahora usted debe comenzar a ver los eventos sesión de usuario en c: \ temp \ ClockSpeed.log cuando los cambios de velocidad de su procesador. Si estás en un ordenador portátil, intente desconectar el adaptador de CA para invocar un cambio de velocidad. Si estás en una computadora de escritorio, pruebe a poner en carga iniciando un montón de programas, y luego dejar reposar.Suponiendo que usted no ha deshabilitado características de ahorro de energía en su BIOS, debería ver el reloj velocidades cambiantes, y queden registrados.
Fuente: http://trevorsullivan.net/2011/01/17/powershell-wmi-eventing-monitor-cpu-speed/
No hay comentarios:
Publicar un comentario