Monitorowanie sesji rozłączonych użytkowników Powershell

Na serwerze z usługami terminalowymi Microsoft można monitorować sesje użytkowników. Mój wybór padł na tych, którzy po skończonej pracy nie wylogują się z serwera. Rozłączają natomiast sesję pozostawiając ją na serwerze w stanie disconnected. Do uzyskania tych informacji posłużę się komendą quser linii poleceń Powershell.

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

Przykładowe wyjście polecenia wygląda następująco:

Widać na nim, że użytkownik administrator ma rozłączoną sesję – w kolumnie STATE widnieje status Disc. Właśnie tacy użytkownicy mnie interesują, więc zawężam polecenie quser tylko użytkowników ze STATE=Disc.

quser | Where-Object {$_ -match 'Disc'}

Widać, że wyjście polecenia zostało zawężone tylko do interesujących mnie rozłączonych sesji.


Aby zapisywać takie informacje historycznie w postaci pliku na dysku, rozbuduję polecenie o zmienną $Date przechowującą aktualną datę i godzinę, oraz zmienną $Path przechowującą ścieżkę do pliku. Zauważ, że w ścieżce do pliku jest również jego nazwa SesjeDisconnected_$Date.txt, która wykorzystuje zmienną $Date. Dzięki temu każde wywołanie polenienia będzie tworzyło nowy plik o unikalnej nazwie. Całość kodu:

$Date = Get-Date -Format "Dyyyy-MM-dd_THH-mm-ss"
$Path = "C:\Users\what-it\Desktop\SesjeDisconnected_$Date.txt"
quser | Where-Object { $_ -match 'Disc' } | Out-File -FilePath $Path -Encoding UTF8

Powyższy kod możemy zapisać do pliku z rozszerzeniem ps1 np. DisconnectedUsers.ps1, a następnie dodać wywołanie tego pliku w Harmonogramie zadań systemu Windows, tak by pliki generowały się automatycznie. W tym celu, 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 🙂

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 *