Esto parece que va funcionando, ¿no?
A mi por lo menos si que me es util este script y espero que a vosotros tambien.
Bueno, como os comente en el articulo de la version 2.0 de este script, ahora vamos a ver como podemos utilizar un fichero de texto en el que previamente hemos introducido los nombres de los equpios que queremos apagar para que los vaya comprobando uno a uno y apagando si es el caso.
En primer lugar creamos un fichero de texto que yo le voy a llamar «equiposapagar.txt» y en el introducimos los equipos que queramos apagar. Como ejemplo podemos poner:
fabrica1
fabrica2
compras3
Podemos poner todos los equipos que queramos. Ojo con incluir servidores o equipos que no deberian apagarse, eh!
Lo primero a tener en cuenta es que en este script no necesitamos ningun dato de entrada, es decir, que al ejecutar el script unicamente escribiremos el nombre del fichero: apagarequipos.ps1
Una vez que tenemos claro esto, nos ponemos manos a la obra con la novedad de esta version: el famoso fichero de texto del cual deberemos cargar su contenido. La linea en custion es la siguiente:
$equiposapagar = get-content -path «c:\power\scripts\equiposapagar.txt»
Interpretamos que, mediante el cmdlet «get-content«, guardamos la informacion del fichero «c:\power\scripts\equiposapagar.txt» en la variable $equiposapagar.
Esto nos queda claro, ¿no?
Otra de las novedades de este script es que utilizaremos la orden «foreach-object» para recorrer todos y cada uno de los equipos que ahora tenemos guardados en la variable $equiposapagar.
A continuacion tenemos el codigo:
#Script: apagarequipos.ps1
#Version: 3.0
#
#Autor: Oscar Abad Folgueira
#Web: https://www.aprendeinformaticaconmigo.com
#Fecha: 25 de Abril de 2009
#
#Tipo: Powershell
#Funcion: Recorre un fichero de texto con nombres de equipo y los va apando uno a uno.
#
#Parametros: No necesita parametros de entrada.
#Uso: apagarequipos.ps1
#
#
#obtener la lista de equipos que se pueden apagar y guardarla en la variable»$equiposapagar»
$equiposapagar = get-content -path «c:\power\scripts\equiposapagar.txt»
#
#Bucle «foreah-object» que recorre todos los equipos del fichero para ver si estan apagados y si es asi
#los apaga
#
$equiposapagar | foreach-object {
$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)
}
}
Creo que no es nada dificil entender el fucnionamiento.
Probad tambien este script si podeis. Yo personalmente lo he puesto en varias fabricas para revisar los equipos que se quedan encendidos por las noches y si estan encendidos, apagarlos.
Yo he añadido unas lineas para crear un log de los equipos que estan encendidos por que siempre esta bien saber cuantos equipos apagamos y, de este modo, si el trabajo merece la pena por el ahorro de consumo.
Venga, espero que me comenteis que tal os ha funcionado.
A pasarlo bien!!
—–
Oscar Abad
http://www.xulak.com – Consultoría informática
Programador WordPress freelance
buenas
Ante todo muchas gracias por compartir tus conocimientos. desde vista, y dentro del PS 2.0 intento ejecutar el script pero me salta el siguiente error:
[PS] C:\power\scripts>.\apagarequipos.ps1
Get-WmiObject : Consulta no válida
En C:\power\scripts\apagarequipos.ps1:20 carácter:24
+ $estado = get-wmiobject <<<< -query «select statuscode from win32_pingstatus where address = ‘$equipo'»
sabes donde puede estar el error?. Las instrucciones no deben de tener espacios intermedios vacios?, me refiero a Ej. ..adress=’$equipo'»
Un saludo y felicidades por Blog
Saludos y bienvenido al blog rcastro.
Con estas historias he tenido yo un monton de mensajes como el que te da a ti.
Antes de nada, supongo que tendras los ficheros en las rutas que indican en el script. c:\power\scripts\ y que tendras creado el fichero «equiposapagar.txt» en el mismo directorio. Bueno esto supongo que si.
Decirte que yo lo estoy haciendo con la version de Powershell 1.0 por que hace tiempo probe con la 2.0 y «get-wmiobject» me dio algun que otro disgusto. Pero bueno, para salir de dudas yo suelo abrir una consola de powershell y voy haciendo las cosas paso a paso. Seguro que me entiendes.
Me lo curro de tal forma que ejecuto una a una las lineas del script y asi se cual es la que me da problemas.
Puede ser que te siga dando ese error, entonces yo verificaria que el equipo remoto esta preparado para aceptar ordenes remotas.
Pero bueno, primero prueba a hacerlo paso a paso y si no te funciona, me dices y te comento algo que puedes hacer.
Venga, muchas gracias por visitar el blog y nos vemos….
A pasarl bien!!
Saludos y muchas gracias, Oscar primero darte mis felicitaciones, segundo pedirte una colaboración con esto de PS 1.0.
Te comento que ya tengo instalado en una unidad virtual con windows server 2003 el PS 1.0, cuento con una red de 5 equipos virtuales q se encuentran en un dominio el cual lo administra el server (se puede decir que este es mi entorno de pruebas), en la empresa a la cual trabajo me pidieron que apagara los equipos a cierta hora ya q algunos funcionarios se les olvida apagar los equipos (diria q a todos), investigando me tope con la pagina y me parece interesante esto de Script con powershell pero lastimosamente es mi primer contacto con esta forma de programación. hasta donde entiendo el script verifica por medio de ping si el estado del equipo para dar la orden de apagado (si da respuesta = orden apagado, si no da respuesta = se considera q esta apagado en esta parte tengo unas dudas), ahora mirando mas abajo comentas q agregaste unas lineas para crear un log de registro no se si es muchos q pudieces compartir estas en la pagina, de nuevo mil gracias.
Hola Oscar:
Ante todo gracias por compartir tus conocimientos. Es primera vez que veo power shell y me parece muy interesante. He probado este script pero al momento de ejecutarlo (haciendo ./apagarequipos) me salen unos comandos en la consola que no entiendo, me aparecen asi:
___GENIUS : 2
___CLASS : ___PARAMETERS
___SUPERCLASS :
___DYNASTY : ___PARAMETERS
___RELPATH :
___PROPERTYCOUNT: 1
___DERIVATION : []
___SERVER :
___NAMESPACE :
___PATH :
___Returnvalue : 0
He revisado el codigo y todo esta bien escrito, las rutas tambien (c:\power○\scripts\****) tengo la version 1 no se que cual pueda ser el error, las PCs tambien tienen los permisos para ser apagados remotamente, estoy ejecutando el script desde un windows2003 con un user Administrador. Por favor tu ayuda. Gracias.
Isiana