Aprende Informatica Conmigo

  • Inicio
  • Contenido Anterior
    • VIDEOTUTORIALES
    • Windows Server 2008
    • POWERSHELL

2 junio, 2009 Por oscar 3 comentarios

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://www.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

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, programacion, scripts powershell, sistemas, tutoriales Etiquetado como: aprendeinformaticaconmigo, powershell, script, script powershell, windows, wmi

Acerca de oscar

Programador WordPress freelance

Comentarios

  1. Santi Saez dice

    2 junio, 2009 a las 11:37

    Hola Oscar,

    Interesante el script, pero para que funcione entiendo que tiene que estar dentro de un dominio.. ¿Sabes de algún método que dada la IP, usuario y contraseña se pueda hacer esto mismo?

    Saludos!

    Accede para responder
  2. oscar dice

    2 junio, 2009 a las 15:51

    Saludos Santi y gracias por visitar el blog.
    En el caso que tu comentas, debes utilizar las credenciales. Si haces un: get-help -detailed get-wmiobject, veras que hay un parametro llamado «-credential». Pues lo que tienes que hacer es jugar con el.
    Al ser diferente el usuario de tu equipo del usuario del equipo remoto y por consiguiente la contraseña, debes crear un objeto para que sea el quien te identifique el la maquina remota.
    Como ejemplo:
    ————————————
    $c = get-credential
    get-wmiobject -class win32_bios -compuername «equipo» -credential $c
    ———————————–
    Cuando ejecutamos get-credential, nos pedira que introduzcamos un usuario y una contraseña. Si es de grupo, asi sin mas, y si es de dominio, podemos indicarle en el campo usuario: dominio\usuario.

    Si quieres hacerlo en una sola linea, siempre puedes incluir la llamada a get-credential dentro del comando get-wmiobject de la siguiente forma:
    ——————————
    get-wmiobject -class win32_bios -computername «equipo» -credential (get-credential usuario)
    ——————————

    Espero haberte ayudado.
    Si tienes algun problema lo comentas…

    Venga, a pasarlo bien!!

    Accede para responder
  3. WILLLL dice

    21 noviembre, 2009 a las 23:36

    excelente blog, pero quiesiera que me ayudaran con algo

    alguien sabe si puedo hacer esto en un codigo java, necesito apagar un equipo desde otro con una aplicacion hecha en java…
    les recomienod si alñgo

    Accede para responder

Deja una respuesta Cancelar la respuesta

Lo siento, debes estar conectado para publicar un comentario.

Hazte con el tema Divi

Divi WordPress Theme
Libro windows server 2008

Libro certificación Windows Server 2016

Libro certificación Windows Server 2016

Libro Windows Server 2016

Libro Windows Sever 2016
Web Hosting

Últimos artículos

  • PHP función var_dump(): Mostrar el contenido de una variable
  • PHP función unset(): Eliminar variables
  • MySQL LIMIT: Limitar la canidad de filas en una consulta
  • PHP función isset(): Evaluar si una variable está definida
  • PHP función empty(): Comprobar si una variable está vacía
  • MySQL SELECT DISTINCT para encontrar registros con diferente valor en el mismo campo
  • Los mejores libros en español para aprender WordPress

Mis Webs

  • Aprende Informática Conmigo
  • Dinapyme
  • MUSIKP
  • Oscar Abad Folgueira

Proyectos

  • Basabe Baserria
  • Batukada Battuere
  • Bicicletas Sin Pedales
  • Bordalan
  • C.R. Pantano del Rumblar
  • Dinapyme
  • DiverBiblio
  • Egia Ingenieros
  • Hermanos Vivas construcciones
  • Ibartxi – Suministros de Gas y Soldadura
  • LANBASE
  • LS Fotografía
  • Luke and Phil
  • Masajes Mas Sana
  • MUSIKP
  • Oh! Yeah Dev
  • Oscar Abad Folgueira
  • Participación ciudadana Basauri
  • Restaurante Bideko
  • Taldesport
  • Vicente Choya
  • WooCommerce Knowledge2K
  • Inicio
  • Contenido Anterior

Copyright © 2023 · Oscar Abad Folgueira Y DINAPYME· Acceder