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 $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 „r
n” 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.