Znalezienie odłączonych sesji terminalowych z pomocą Powershella

Page content

Piątek. Ostatni dzień pracy - próba logowania do vCenter. Błąd

Kolejna - błąd. Oczywiście pojawia się pierwsza myśl - WTF!?! Nie zrażając się następuje kolejna próba logowania do serwera przy użyciu RDP. Konto zostało zablokowane.

Przyczyna

Jak zwykle okazało się, że miałem zostawioną sesję terminalową na serwerze - w tym przypadku sprzed 192 dni.

Rozwiązanie

Jak zwykle bardzo proste: wylogowanie sesji i odblokowanie konta. Wkurzyłem się niemiłosiernie bo to już kolejny raz w ciągu miesiąca więc postanowiłem coś z tym zrobić.

Chwila spędzona z goolge i udało mi się znaleźć moduł Terminal Services do Powershella. Ściągamy go stąd - https://psterminalservices.codeplex.com/ i instalujemy według instrukcji.

Po zainstalowaniu odpalamy Powershella i wykonujemy komendę:

Get-TSSession -ComputerName NAZWAKOMPUTERA -State Disconnected -UserName USERNAME

Jeżeli chcemy zobaczyć wszystkie odłączone sesje na komputerze to usuwamy

UserName USERNAME

Oto przykładowy skrypt utworzony z pomocą kolegi (pętla ForEach 🙂 ). W skrypcie pobieram komputery z Active Directory, które mają w nazwie ciąg znaków - można użyć *.

Przykładowo:

"Name -like 'L*SR*'"

Co pozwoli znaleźć wszystkie komputery zaczynające się od litery L i zawierające w nazwie SR.

Import-module ActiveDirectory
Import-Module PSTerminalServices
$Computers = Get-ADComputer -Filter "Name -like 'L*SR*'" | ForEach-Object {$_.Name}
ForEach ($Computer in $Computers) 
{
Get-TSSession -ComputerName $Computer -State Disconnected -UserName _k748050 -ErrorAction SilentlyContinue
}

W skrypcie dodałem również kontynuację po błędach - ponieważ komputer może istnieć w AD ale może być niedostępny i skrypt zatrzymuje się bo nie odpowiada RPC.