19433 Letture
Inviare indirizzo IP di un sistema remoto via email con PowerShell

Inviare indirizzo IP di un sistema remoto via email con PowerShell

Come fare per inviare email in automatico con PowerShell e leggere l'indirizzo IP pubblico assegnato al router.

Delle potenzialità di PowerShell abbiamo ampiamente parlato nell'articolo PowerShell per esempi: cosa si può fare e in altri approfondimenti.
Si supponga di avere a che fare con uno o più sistemi Windows remoti dei quali sia necessario, periodicamente, conoscere l'indirizzo IP pubblico.
Se l'indirizzo IP fosse assegnato in modo statico dall'operatore di telecomunicazioni, esso non cambierà nel tempo. Se però fosse attributo in modo dinamico, con ogni probabilità risulterà diverso a ogni connessione: Il mio IP: come trovarlo e a che cosa serve.

I servizi DDNS (Dynamic DNS) consentono di associare a un indirizzo mnemonico (che non cambia nel tempo) l'IP dinamico che di volta in volta il provider Internet associa al router:


- DynDNS DDNS gratuito: guida alla configurazione e all'utilizzo di No-IP
- DDNS: cos'è, come funziona e come utilizzarlo

Ma se si volesse trasmettere via email, magari si base programmatica, l'indirizzo IP associato a un sistema insieme eventualmente con altre informazioni?

Come inviare un'e-mail con PowerShell inserendovi anche l'indirizzo IP pubblico

Con poche righe, PowerShell permette di comporre e inviare un messaggio di posta elettronica.

Dopo aver creato un file di testo con estensione .ps1, si provi ad esempio a incollarvi quanto segue:

$IP = (Invoke-WebRequest ifconfig.me/ip).Content.Trim()
$EmailFrom = "EMAIL_MITTENTE"
$EmailTo = "EMAIL_DESTINATARIO"
$Subject = "Indirizzo IP"
$Body = "Indirizzo IP attuale: $IP"
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("[email protected]", "PASSWORD_GMAIL");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

Nell'esempio viene composta un'email contenente l'indirizzo IP pubblico associato al router che viene estratto usando il servizio ifconfig.me. Si sarebbe comunque potuto usare qualunque altro servizio similare, ad esempio uno di quelli presentati nell'articolo Il mio IP: come trovarlo e a che cosa serve.

In questo caso si spedisce usando i server SMTP di Google (connessione sicura sulla porta TCP 587 e crittografia abilitata) e un account con verifica in due passaggi disabilitata (abilitandola il tentativo di invio della posta non andrà a buon fine e si riceverà il messaggio d'errore Il server SMTP richiede una connessione protetta oppure il client non è stato autenticato. Risposta del server: 5.7.0 Authentication Required).

La password dell'account Google viene memorizzata in chiaro nello script PowerShell: il consiglio è non usare credenziali di account che si usano per scopi produttivi e che contengono informazioni riservate e attivare la crittografia BitLocker sul sistema in uso (BitLocker, come proteggere i dati su hard disk e SSD e chiedere una password all'avvio).

Al posto di EMAIL_MITTENTE e EMAIL_DESTINATARIO dovranno ovviamente essere indicati gli indirizzi email del mittente e del destinatario del messaggio di posta elettronica. Più sotto, PASSWORD_GMAIL deve essere sostituita con la password associata all'account di posta in modo tale da autenticarsi correttamente e usare il server SMTP.

Di default Windows è impostato in maniera tale da non permettere, per motivi di sicurezza, l'avvio di script PowerShell (execution policy posta su Restricted come facilmente verificabile digitando powershell Get-ExecutionPolicy da una finestra del prompt dei comandi (cmd) o semplicemente Get-ExecutionPolicy da PowerShell.

Per eseguire lo script appena creato senza modificare la policy di default, si può aprire una finestra del prompt dei comandi (Windows+R, cmd; anche senza ricorrere ai diritti di amministratore) quindi digitare quanto segue:


@powershell.exe -NoProfile -ExecutionPolicy Bypass -File "c:\temp\inviaip.ps1"

Al posto di c:\temp\inviaip.ps1 si dovrà indicare percorso e nome dello script PowerShell che estrae l'indirizzo IP pubblico e lo invia via email.

Digitando Utilità di pianificazione nella casella di ricerca di Windows quindi selezionando Crea attività dalla colonna di destra, si potrà richiedere l'avvio periodico dello script PowerShell o sulla base di determinate condizioni (ad esempio all'accensione o al riavvio della macchina).

Per approfondire, suggeriamo la lettura dell'articolo Posta in uscita: perché le email non partono.

Inviare indirizzo IP di un sistema remoto via email con PowerShell