---
title: "Znalezienie odłączonych sesji terminalowych z pomocą Powershella"
date: "2012-08-03T09:19:14Z"
tags: ["PowerShell", "Skrypt", "Windows Server", "Windows Server 2003", "Windows Server 2008", "Windows Server 2008 R2"]
categories: ["Microsoft", "Scripting & Automation"]
---

Piątek. Ostatni dzień pracy - próba logowania do vCenter. Błąd
<!--more-->
<!--adsense-->
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 - <a href="https://psterminalservices.codeplex.com/" target="_blank">https://psterminalservices.codeplex.com</a>/ i instalujemy według instrukcji.

Po zainstalowaniu odpalamy Powershella i wykonujemy komendę:

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

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

```bash
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:

```PowerShell
"Name -like 'L*SR*'"
```

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


```PowerShell
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**.
