Quando al lavoro fornisco supporto remoto agli utenti, una cosa spesso complicata è mettermi in contatto con le persone. Se li chiami al telefono vedono un numero per loro strano e non rispondono, oppure hanno qualche app che blocca le chiamate, i messaggi via chat vengono ignorati, così mi capita di utilizzare uno script PowerShell per inviare, grazie a Ninja, un popup sullo schermo dell’utente “ricercato”. Devo dire che alcuni utenti, nonostante io nel messaggio indicassi chiaramente chi ero e cosa volevo, si sono allarmati e hanno chiesto spiegazioni ai loro superiori o ai miei colleghi di sede.

Come inviare messaggio computer/utente utilizzando PowerShell

Il presente articolo è rivolto agli amministratori di computer, o agli IT, che dispongono di programmi RMM, che è l’abbreviazione di Remote Monitoring Management (monitoraggio e gestione remota), in grado di avviare script PowerShell nei computer del dominio.

Lo script che utilizziamo è simile a quello che vedete di seguito e può essere usato anche come avviso prima di eseguire qualche comando sul computer remoto. Praticamente “Salva tutto il tuo lavoro perché dobbiamo riavviare il computer per poterlo aggiornare”.

Se volete eseguire il comando, in questo caso lo spegnimento, togliete il # all’inizio dell’ultima riga. La riga $timerInSeconds = 60 indica quanti secondi devono passare dopo aver cliccato OK prima di eseguire il comando inserito nello script.

  • Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
  • # Imposta un timer (in secondi) $timerInSeconds = 60
  • # Mostra una notifica Add-Type -AssemblyName PresentationFramework
  • [System.Windows.MessageBox]::Show("Il tuo computer non è aggiornato e verrà spento. Contattare TurboLab.it per il ripristino.", "Avviso di Sicurezza", "Ok",”Warning”)
  • # Attendi il tempo impostato
  • Start-Sleep -Seconds $timerInSeconds
  • # Spegni il computer o esegui qualsiasi altro comando utile
  • # Shutdown -s -t 0

Come inviare messaggio computer/utente utilizzando PowerShell

Una variante dello script precedente è questa, dove le opzioni del messaggio sono scritte in righe separate così da renderle più identificabili. Anche qui, se si vuole eseguire un comando vanno tolti i # dalle ultime due righe dello script.

  • Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
  • # Opzioni del messaggio
  • $Title = "Avviso di sicurezza"
  • $Body = "Il tuo computer si autodistruggerà entro 10 secondi. Premi OK per eseguire."
  • $Icon = "Error"
  • $Button = "OK"
  • # Visualizza il messaggio
  • Add-Type -AssemblyName PresentationFramework [System.Windows.MessageBox]::Show($Body, $Title, $Button, $Icon)
  • #Avvia il comando
  • #Start-Sleep -Seconds 10
  • #stop-computer -Force

Come inviare messaggio computer/utente utilizzando PowerShell

E per concludere uno script, creato da Zigul, che trovate in allegato all’articolo e che permette l’invio di un messaggio molto più personalizzato e sicuramente non in stile Windows come i precedenti (questo script è stato poi sviluppato in quello che ora è WrapperShell, v qui).

Lo script InvioMessaggio.ps1 lo potete modificare anche con Notepad, è un file di testo in fondo, e tra le righe più importanti, per personalizzare ancora di più il messaggio, segnalo queste:

  • 17 - titolo finestra
  • 18 - trasparenza finestra
  • 19 - dimensioni finestra
  • 20 - colore sfondo finestra in esadecimale
  • 21 - colore testo in esadecimale
  • 23 - finestra sempre in primo piano rispetto alle altre
  • 26 - possibilità di minimizzare finestra
  • 58 - dimensioni immagine
  • 65 - testo della comunicazione
  • 70 - carattere testo
  • 81 - nome primo pulsante
  • 89 - azione primo pulsante (impostata su chiusura finestra)
  • 96 - nome secondo pulsante
  • 104 - azione secondo pulsante (impostata su apertura notepad, ma può essere modificata per eseguire qualsiasi comando)

La riga 29 contiene fra virgolette la stringa in Base64 dell'immagine di prova che viene caricata a sinistra nella finestra; per ottenere la stringa è necessario usare i comandi sempre da PowerShell:

  • $imagePath = "Percorso e nome del file immagine da convertire"
  • $imageBytes = [System.IO.File]::ReadAllBytes($imagePath)
  • $base64Image = [Convert]::ToBase64String($imageBytes)
  • $base64Image | Out-File "Percorso salvataggio file:\stringa.txt"

Poi non resta che incollare il testo contenuto nel file TXT alla riga 29 fra virgolette, evitando gli spazi in eccesso alla fine (anche se lo script dovrebbe eliminarli). La numerazione delle righe considera la lunga stringa tutta alla riga 29.

Il risultato finale sarà qualcosa di simile a questo a seconda delle modifiche fatte allo script.

Come inviare messaggio computer/utente utilizzando PowerShell