jueves, 13 de noviembre de 2014

Explorando powershell: Script automatizado con envío de ip pública vía email ( Windows Server 2012 + Powershell + email + SCHTASKS )







Hoy veremos un simple script para enviar un email a nuestra email desde powershell con un simple script y automatizaremos esto para que se ejecute cada cierto tiempo, teniendo así actualizada la dirección IP pública.

Lo primero que tenemos que hacer es comprobar que nuestra powershell esté en la versión 4.0, ejecutando 'get-host' nos mostrará la versión actual.

Despues de comprobar la versión vamos a realizar el script esto, lo podemos hacer con un editor cualquiera como notepad++, block de notas o como en mi caso Powershell ISE.

Abrimos a nuestro Powershell ISE (con permisos de administrador) e introducimos la script (mis valores son con cuenta gmail y en las letras en rojo tendréis que editarlas con vuestros valores).


#almacenamos la fecha en la variable $date
$date = Get-Date -format d
#Extraemos la ip de la web "http://chekip.dyndns.com" y la almacenados en la variable $currentip
$currentip = (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]" 
while ($currentip -eq '') {$currentip = (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]"} 
#Montamos nuestro correo añadimos las variables almacenadas y lo enviamos
Write-Host "sending public ip $currentip ..." 
$EmailFrom = "usuario@gmail.com"
$EmailTo = "usuario@gmail.com
$Subject = "#$date - ip windows server
$Body = "Fecha: $date // Public server ip $currentip
$SMTPServer = "smtp.gmail.com
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("cuenta_usuario_mail_sin_dominio", "contraseña_del_email"); 

$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)


Una vez escrito todo lo comprobamos que funciona desde el mismo edito ejecutamos > guardamos y comprobamos que funciona bien tanto en la pantalla, como que llega a nuestro email.






Una vez ejecutado sin fallos comprobamos nuestro email.






Una vez realizado todo lo anterior ahora vamos a crear una tarea programada para añadir este script y que se ejecute cuando nosotros queramos.

Para esto utilizaremos schtask, podemos consultar el enlace anterior o simplemente buscar la ayuda en nuestro powershell con 'schtask /?'. 

Ejemplo explicado:

schtasks /create /sc el_tipo_de_tiempos /mo cada_cuanto_tiempo /d cuantos_dias /tn nombre_tarea_programada /tr /ruta/del/script /st hora_de_inicio

Ejemplo: 


schtasks /create /sc minute /mo 10 /d 31 /tn send_public_ip /tr C:\scripts\public_ip_email_send.ps1 /st 08:00:00







Y por último mostramos el estado de la tarea programada con el comando de consulta query 'schtask /query /TN send_public_ip'.




Y finalmente como vemos en la imagen nos muestra el estado del proceso y cuándo se va a ejecutar la próxima vez. 

Si queremos eliminar nuestro schtask ejecutaremos por ejemplo como es mi caso 'schtask /delete /TN send_public_ip'