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.

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 $credentialObowią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 ,a będę miał więcej energii na pisanie kolejnych ciekawych wpisów.
