В Powershell есть модуль RemoteDesktop, предназначенный для управления терминальными сеансами
ipmo RemoteDesktop Get-RDUserSession | ft UserName,CreateTime,DisconnectTime,SessionState,SessionId,HostServer -AutoSize
Но Get-RDUserSession доступен начиная только с 2012 сервера, требует запуска сеанса с повышенными привилегиями и отображает время простоя в миллисекундах, что неудобно для восприятия. Поэтому можно воспользоваться и другим, более громоздким но безотказным вариантом, с использованием команды quser
[Console]::outputEncoding = [System.Text.Encoding]::GetEncoding('cp866') function Get-TSSessions { param( $ComputerName = "localhost" ) quser /server:$ComputerName | # Преобразуем к формату csv документа, с разделением полей запятыми ForEach-Object { ( $_.Trim() -replace '\s{18,}(?=\d+)',',,' ) -replace "\s+","," -replace ("IDLE,","IDLE ")} |` ConvertFrom-Csv # Конвертируем в объекты } Get-TSSessions -ComputerName "TERMserv" | ft -AutoSize
ConvertFrom-String
Аналогичный эффект должен был дать и ConvertFrom-String.
Но я не смог его заставить нормально обрабатывать столбцы с отсутствующими значениями, в результате чего структура таблицы «съезжала».
Так что при возможности разберем ConvertFrom-String в отдельной заметке.