Ultimamente mi e’ capitato di dover creare un’utile script in Poweshell per gestire il cambio di Smtp di una linea adsl verso un’altro Smtp appartenente alla linea adsl di Backup
che si attiva se la prima non dovesse essere piu’ raggiungibile.
Questo quindi permette che la posta continui a funzionare inviando e ricevendo email ( appoggiandosi appunto al 2° Smtp di Backup ) .
Lo stesso script ricambia l’ Smtp appena la 1° linea Adsl torna attiva usufruendo qunidi nuovamente dell’ Smtp primario .

Riporto lo script creato in Powershell 2.0 :

Nell’esempio lo script cambia il 1° Smtp “mailbus.fastweb.it” con il 2° Smtp “out.alice.it” in caso non sia raggiungibile l’indirizzo ip : 10.10.10.190

1° Linea : Fastweb Smtp : mailbus.fasteweb.it
2° Linea : Alice Smtp : out.alice.it

Ho poi creato un’ operazione pianificata che ogni 5 minuti attiva lo script ( script.ps1) descritto e
in caso ci sia un cambiamento del smtp viene spedita un’email di avviso a s.rosai@atik.it :

**************** INIZIO **************************************

#Adding Exchange Snap In to execute Exchange CmdLets in this script

 

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin

#funzione, in caso di cambiamento scrive su log e manda mail

function logg

 

{

param ($cosa, $smtpserver)

“QUI ARRIVA” + $cosa + ” ” + $smtpserver

$date=Get-date

$msg=$cosa+ ” ” + $date

# Aggiungo append cosi aggiunge l’evento mantenendo lo storico

$msg |out-file “c:scriptslogsmtp.txt” -append

 

# Invio Email di avvenuto cambiamento SMTP

 

$emailFrom = “miaemail@dominio.com”

$emailTo = “s.rosai@atik.it”

$subject = “Cambio SMTP su Dominio.com”

$smtp = new-object Net.Mail.SmtpClient($smtpServer)

$smtp.Send($emailFrom, $emailTo, $subject, $msg)

 

}
#Verifico se l’indirizzo 10.10.10.190 e’ raggiungibile

$ping = get-wmiobject -Query “select * from win32_pingstatus where Address=’10.10.10.190″

# Condizioni se il ping risponde

 

if ($ping.statuscode -eq 0)

{

” L indirizzo risponde  in  :  {0}ms” -f $ping.responsetime

# Se risponde controllo se è Alice

get-sendconnector | Select-Object smarthostsstring | Tee-Object -variable smarthosts

 

if ( $smarthosts -match “alice”)

{

# se è alice rimetto Mailbus

Set-SendConnector -identity “Windows SBS internet Send MIOSERVER” -smarthosts  “mailbus.fastweb.it” -Port 25

logg “è tornata attivo l’IP 10.10.10.190 reimposto mailbus.fastweb.it” : “mailbus.fastweb.it”

}

}

else {

# SE NON Pinga Controlla se è già su alice e se non lo è lo imposta

get-sendconnector | Select-Object smarthostsstring | Tee-Object -variable smarthosts

if ( $smarthosts -match “fastweb”)

{

# se è fastweb lo mette su alice

Set-SendConnector -identity “Windows SBS internet Send MIOSERVER” -smarthosts  “out.alice.it” -Port 25

logg “l’IP 10.10.10.190 imposto out.alice.it come SMTP” “out.alice.it”

}

}

************************** FINE ************************************