Script Powershell – Apagar equipos remotamente – Ver. 2.0

Vamos a trabajar un poco mas con el script que escribimos en el articulo anterior dedicado a scripts en Powershell y vamos a añadirle una linea que nos ayudara.

Si habeis probado el script que os comento, os habra pasado que si el equipo que queriais a apagar ya estaba apagado, os mostrara un mensaje de error. Para solucionar este problema, vamos a comprobar el estado del equipo antes de lanzar el apagado.

Para ello utilizaremos la clase «win32_pingstatuscode» que nos facilita Windows a traves de WMI.

Hay varias formas de trabajar con esta funcion, pero yo he preferido utilizar la siguiente:

get-wmiobject -query «select statuscode from win32_pingstatus where address = ‘$equipo'»

Con esta line de codigo, lo que hacemos es una consulta, de esas del tipo de sql, ¿os suena algo, no?

La consulta lo que hace es recoger el valor de la propiedad «statuscode» de la clase «win32_pingstatus» del equipo en cuestion.  Como esta linea por si misma no nos va a mostrar nada, tendremos que guardarla en una variable para que podamos trabajar con el valor devuelto y, en funcion del resultado, hacer una cosa u otra.

La linea de codigo completa quedaria de la siguiente forma:

$estado = get-wmiobject -query «select statuscode from win32_pingstatus where address = ‘$equipo'»

Vale, ahora tenemos almacenado el valor del estado del equipo en la variable «$estado«.

En esta pagina nos describen la clase «win32_pingstatus» y sus miembros. Nos viene bien para saber los posibles valores que puede tomar «statuscode«.

Bueno, no esperamos mas y os pongo como quedaria el codigo:


#Script: apagarequipos.ps1
#Version: 2.0
#
#Autor: Oscar Abad Folgueira
#Web:   https://aprendeinformaticaconmigo.com
#Fecha: 25 de Abril de 2009
#
#Tipo: Powershell
#Funcion: Apagar equipos remotamente. Estga version comprueba el estado del equipo

#antes de lanzar el apagado.
#
#Parametros: nombre el equipo a apagar.
#Uso: apagarequipos.ps1 equipo
#
#

Param($equipo)         #parametro de entrada (Nombre del equipo a apagar).

$equipo = $_
$estado = get-wmiobject -query «select statuscode from win32_pingstatus where address = ‘$equipo'»
if ($estado.statuscode -eq 0) {
(get-wmiobject -class win32_operatingsystem -computername $equipo).win32shutdown(12)
}


Ademas de lo que hemos comentado antes, podemos ver que hemos añadido un if para evaluar el estado del equipo en cuestion. Si el equipo esta apagado, no hace nada, pero si no lo esta, lanza el apagado.

No hay mucho mas que decir, simplemente que lo probeis y me comenteis que tal os ha ido y si os es util.

En la siguiente version de este script, veremos como podemos utilizar un fichero de texto en el que hemos introducido previamente el nombre de los equipos que queremos apagar para que nos apague una serie de equipos uno detras de otro sin tener que hacer uno a uno a mano. Ademas, nos servira para crear una tarea programada para que se apaguen por la noche o el fin de semana.

Venga, a pasarlo bien!!

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

Los comentarios están cerrados.