Wysłanie wiadomości e-mail z powershell

Za pomocą Powershell możemy wydobyć praktycznie wszystkie informacje o naszym systemie Windows. Dodając do Powershell możliwość wysłania wiadomości e-mail i ustawienia harmonogramu wysyłki – otrzymujemy proste (aczkolwiek bardzo pomocne) automatyczne raportowanie.

Grafika wygenerowana przez AI https://www.bing.com/images/create

Ten wpis oprę na raporcie z użytkownikami, którzy mają rozłączoną sesję. Polecenie jest opisane dokładnie w tym artykule.

Na początek musimy zapisać na dysku poświadczenia, do naszego adresu e-mail, z którego będziemy wysyłali raport. W tym celu musimy uruchomić poniższe polecenie, zmieniając w nim ścieżkę do pliku .xml z poświadczeniami. Hasło będzie przechowywane w pliku w postaci zaszyfrowanej.

W tym celu uruchamiam program PowerShell ISE jako administrator, wklejam poniższy kod i uruchamiam go . Jeżeli po uruchomieniu PowerShell ISE nie ma pola do wpisania kodu, to wybieramy View/Show Script Pane wg zrzutu poniżej.

$credential = Get-Credential
$credential | Export-Clixml -Path "C:\Users\what-it\Desktop\Credentials.xml"

Po uruchomieniu kodu, w nowo otwartym oknie podajemy poświadczenia do naszego konta e-mail, z którego będziemy wysyłać raporty. Tak jak byśmy konfigurowali w programie pocztowym serwer SMTP. W tym przypadku adres e-mail to biuro@what-it.pl.

Po kliknięciu OK, na pulpicie komputera (wg ścieżki, którą podałem w kodzie) zostanie utworzony plik Credentials.xml z nazwą użytkownika i zaszyfrowanym hasłem.

Zajmijmy się teraz analizą gotowego kodu skryptu poniżej.

Import-Module -Name Microsoft.PowerShell.Management
Import-Module -Name Microsoft.PowerShell.Security

$Date = Get-Date -Format "Dyyyy-MM-dd_THH-mm-ss"
$SMTPServer = "smtp.what-it.pl"
$SMTPPort = 587
$From = "notifications@what-it.pl"
$To = "biuro@what-it.pl"
$Subject = "Disconnected users " + $Date
$Body = quser | Where-Object { $_ -match 'Disc' } 
$Body = $Body -split "`r`n" | ForEach-Object { $_ + "`r`n" }
$Body = $Body -join ''
$Body = "Disconnected users:`n" + $Body
$credential = Import-Clixml -Path "C:\Users\what-it\Desktop\Credentials.xml"

Send-MailMessage -From $From -Subject $Subject -To $To -Body $Body -Port $SMTPPort -SmtpServer $SMTPServer -Credential $credential

Obowiązkowo musimy w nim zmienić:

$SMTPServer = "nazwa.twojego.serwera.smtp"
$SMTPPort = 587 (port serwera SMTP)
$From = "adres.e-mail.OD"
$To = "adres.e-mail.DO"
$credential = Import-Clixml -Path "C:\Users\what-it\Desktop\Credentials.xml" (ścieżka do pliku Credentials.xml)

Gotowy skrypt wklejamy do Windows PowerShell ISE, edytor PS ISE można uruchomić za pomocą kombinacji klawiszy Win+R i w otwartym oknie Uruchamianie wpisując powershell_ise.exe.

Następnie zapisujemy skrypt, ja zrobię to na Pulpicie (C:\Users\what-it\Desktop\) pod nazwą DisconnectedUsers.ps1.

Kolej teraz na automatyzację procesu wysyłania wiadomości e-mail z raportem. Użyję do tego Harmonogramu zadań, można go uruchomić za pomocą kombinacji klawiszy Win+R i w otwartym oknie Uruchamianie wpisując taskschd.msc.

Dodajemy nowe zadanie. We właściwościach zadania, na zakładce Akcje dodajemy akcję wg wzoru poniżej:

Oczywiście w zakładce Wyzwalacze dodajemy odpowiedni wyzwalacz, zgodnie z tym, jak często skrypt ma być uruchamiany.

Koniec 🙂


Dla ciekawskich analiza pozostałej części kodu:

$Date = Get-Date -Format "Dyyyy-MM-dd_THH-mm-ss" – Format daty, jaki jest używany w temacie widaomości e-mail.

$Subject = "Temat wiadomości e-mail"

$Body = Polecenie PowerShell, którego wyjście ma być wysłane przez e-mail. Można zastąpić dowolnym poleceniem PowerShell.

$Body = $Body -split "rn" | ForEach-Object { $_ + "rn" } – Dzielimy wynik polecenia na linie za pomocą -split i każdą linię przetwarzamy w pętli ForEach-Object, dodając znaki CRLF „rn” na końcu każdej linii. W ten sposób każda linia we wiadomości e-mail będzie w oddzielnym wierszu.

$Body = $Body -join '' – Używamy -join do połączenia wszystkich przetworzonych linii w jeden długi ciąg znaków.

$Body = "Disconnected users:`n" + $Body – Kosmetycznie dodaję tytuł raportu w treści wiadomości e-mail.

Jeżeli pomogłem to Postaw mi kawę na buycoffee.to ,a będę miał więcej energii na pisanie kolejnych ciekawych wpisów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *