Obtener el tiempo de actividad del equipo mediante PowerShell
El tiempo de actividad del equipo es una estadística importante en la administración de sistemas. Estas son varias de las formas en que podemos determinar el tiempo de actividad del sistema para un equipo (tenga en cuenta que esta lista no es exhaustiva):
1. La pestaña Rendimiento del administrador de tareas muestra el tiempo de actividad del equipo como días, horas, minutos y segundos.
2. La herramienta de línea de comandos Systeminfo muestra la última hora de arranque del equipo.
3. El ID de Evento 6005 más reciente en el registro de eventos del sistema del equipo registra el último tiempo de arranque del equipo.
4., La clase WMI Win32_OperatingSystem tiene una propiedad LastBootUpTime que contiene el último tiempo de arranque del equipo.
Cada una de estas técnicas tiene sus pros y sus contras. Por ejemplo, el Administrador de tareas proporciona una visibilidad rápida del tiempo de actividad de un solo equipo, y el registro de eventos contiene información adicional sobre el evento 6005 que puede proporcionar información sobre un fallo del sistema. Las tres primeras opciones probablemente no sean las mejores para fines de automatización (por ejemplo, consultar una lista de servidores para obtener tiempo de actividad), así que veamos WMI. En primer lugar, sin embargo, tenemos que echar un vistazo a cómo WMI devuelve la información de tiempo de actividad.,
usando WMI para obtener el tiempo de actividad del equipo
hay varias maneras en que podemos recuperar el tiempo de actividad de un equipo usando WMI. Una de las formas más obvias, antes de Windows PowerShell, era usar el comando WMIC. Por ejemplo:
Este comando recupera la propiedad LastBootUpTime de la instancia de clase Win32_OperatingSystem en el equipo., En PowerShell, usaríamos el cmdlet Get-WmiObject en lugar de WMIC:
pruebe estos comandos usted mismo, y verá que la salida no es necesariamente «fácil de usar» porque la fecha y la hora expresadas en la propiedad LastBootUpTime está formateada como una cadena de fecha y hora CIM (Common Information Model). Por ejemplo:
Esta cadena datetime se traduce como May 12, 2016, 15:48:36 (3:48pm). 125599 es el número de microsegundos (los ignoraremos), y el -360 representa el número de minutos de desplazamiento desde GMT., En este ejemplo, -360 significa que el tiempo está 6 horas por detrás de GMT. (Del mismo modo, +180 significaría «3 horas antes de GMT.»)
para hacer que la cadena CIM datetime sea más utilizable, necesitaremos convertirla en una fecha utilizable (un objeto DateTime). Afortunadamente, PowerShell lo hace simple: El Método estático ToDateTime del sistema.Gestión.La clase ManagementDateTimeConverter. NET convierte la cadena CIM datetime en un objeto DateTime que podemos usar más fácilmente en PowerShell. La figura 1 muestra un ejemplo.,
Figura 1 – Convertir el último tiempo de arranque del equipo en un DateTime
en la Figura 1, la variable dat dateTime contiene la fecha y la hora en que el equipo actual se inició por última vez. Para obtener la salida del tiempo de actividad (en lugar de la fecha y hora del último arranque), podemos restarlo de la hora actual (Get-Date), lo que resulta en un objeto TimeSpan que contiene la diferencia. La figura 2 muestra un ejemplo de esto.,
Figura 2-Convertir el último tiempo de arranque del equipo en un tiempo de actividad legible
el primer comando de la Figura 2 crea un objeto TimeSpan que contiene la diferencia entre la fecha y hora actuales y la última hora de arranque (el objeto dat dateTime que creamos en la Figura 1). El segundo comando genera el objeto TimeSpan, y el comando final utiliza el operador-f para generar el TimeSpan como una cadena formateada legible que nos indica que el equipo actual ha estado activo durante 4 días, 19 horas, 56 minutos y 44 segundos.,
obtener el último tiempo de arranque desde un equipo remoto
los ejemplos de las figuras 1 y 2 se dirigen al equipo local. ¿Cómo podemos apuntar a un ordenador remoto? Afortunadamente, WMI nos permite recuperar información sobre un equipo remoto utilizando el parámetro-ComputerName. WMI también nos permitirá especificar credenciales alternativas para un equipo remoto en un objeto PSCredential. La figura 3 muestra un ejemplo de cómo obtener el último tiempo de arranque para un equipo llamado server1.,
Figura 3-Obtener el último tiempo de arranque desde un equipo remoto
el primer comando de la Figura 3 obtiene un objeto PSCredential en la variable C cred, y el segundo comando obtiene la cadena de fecha y hora CIM que contiene el último tiempo de arranque para el servidor del computador1 (observe los parámetros-ComputerName y-Credential). El tercer comando convierte el último tiempo de arranque en un objeto DateTime, y el último comando muestra el último tiempo de arranque del equipo.
poner todo junto-El Get-Uptime.,PS1 Script
los ejemplos que se muestran en las figuras 1 y 2 muestran cómo obtener el último tiempo de arranque del equipo y se muestran como una cadena fácil de leer, y la Figura 3 muestra cómo obtener el último tiempo de arranque de un equipo remoto. Por supuesto, no hay necesidad de recordar todos los matices si encapsulamos la lógica en un script fácil de usar. El script Get-Uptime.ps1 hace todo el trabajo duro por nosotros. La sintaxis del script es la siguiente:
el parámetro-ComputerName es opcional y nombra los equipos para los que desea obtener la información de tiempo de actividad., Este parámetro admite varios objetos, entrada de canalización y objetos que tienen una propiedad ComputerName. El nombre del parámetro-ComputerName es opcional. Si omite este parámetro, el valor predeterminado es generar información de tiempo de actividad para el equipo actual.
el parámetro-Credential proporciona credenciales alternativas si desea consultar uno o más equipos remotos y su cuenta actual conectada no tiene acceso. Consultar el tiempo de actividad no requiere privilegios de administrador en el equipo local, pero es necesario para los equipos remotos.,
el script produce objetos con tres propiedades: ComputerName (el nombre del equipo), LastBootTime (un DateTime que contiene el último tiempo de arranque del equipo) y Uptime (una cadena de tiempo de actividad fácil de leer).
obtener el tiempo de actividad para varios equipos
La Figura 4 ilustra cómo obtener el tiempo de actividad para tres equipos remotos de dos maneras diferentes.,
Figura 4 – Obtener el tiempo de actividad de tres equipos remotos de dos maneras diferentes
el primer comando de la Figura 4 especifica los tres equipos como parámetro del script Get-Uptime, y el segundo comando Especifica los tres equipos como entrada de canalización. Tenga en cuenta que ambos comandos producen una salida idéntica (excepto que las cadenas de tiempo de actividad en la salida del segundo comando son un poco más tarde).
dado que el script admite la entrada de canalización, incluso puede usar la salida del cmdlet Get-ADComputer para informar sobre el tiempo de actividad de todos los equipos de una unidad organizativa., Por ejemplo, considere el siguiente comando:
(divido el comando en varias líneas para que sea más fácil de leer.) Este comando recupera los nombres de todos los equipos en la unidad organizativa de los servidores, selecciona solo la propiedad Name de cada equipo (Select-Object-ExpandProperty), ordena la lista de nombres de equipos y, finalmente, obtiene el tiempo de actividad de cada equipo.
El Tiempo de actividad de la computadora es fácil
El tiempo de actividad de la computadora es una métrica importante. Hay una variedad de formas de obtener tiempo de actividad, pero no una forma sencilla en PowerShell. El Tiempo De Funcionamiento.,ps1 script llena este vacío y hace que sea fácil obtener el tiempo de actividad de la computadora, sin importar si desea obtener el tiempo de actividad de la computadora actual o el tiempo de actividad de las computadoras remotas.