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ą quse
r linii poleceń Powershell
.
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 ,a będę miał więcej energii na pisanie kolejnych ciekawych wpisów.