Использование Qwinsta для экспорта сокращенного списка отключенных сессий - PullRequest
0 голосов
/ 25 апреля 2018

Мне нужно создать приложение в Powershell, которое будет перечислять «Отключенные» удаленные сеансы, оно должно вывести имя пользователя и идентификатор сеанса, которые позже будут использоваться с rwinsta для удаления сеанса

Я нашел скрипт в stackoverflow, который почти подтверждает концепцию, выполняя поиск сессий и предоставляя сокращенный список, который показывает только имя пользователя и идентификатор сессии, но я изо всех сил пытаюсь решить проблемы с форматированием. Функция Foreach and replace обрезает пробелы и заставляет строки переключать столбцы.

function Get-TSSessions
{
    param ($ComputerName = "SERVER")
    qwinsta /server:$ComputerName | ForEach-Object {$_.Trim() -replace "\s+","," } | ConvertFrom-Csv
}

Get-TSSessions -ComputerName "SERVER2016" | ft -Property USERNAME, ID -AutoSize

Затем я получаю следующее:

USERNAME      ID
--------      --
0             Disc
1             Conn
Administrator 5
6             Disc
65536         Listen

Если я удаляю ForEach-Object {$ _. Trim () -replace "\ s +", ","} из команды Qwinsta, а затем удаляю Format-Table -Property USERNAME, ID -Autosize из Get- TSSessions - получаю следующую таблицу:

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
 console                                     1  Conn
 31c5ce94259d4...  Administrator             5  Active
                   admin2                    6  Disc
 31c5ce94259d4...                        65536  Listen
 rdp-tcp                                 65537  Listen

Как видите, результаты в первой таблице перемещаются в пустое пространство слева, когда в этом столбце нет записи, поэтому в двух отключенных сеансах не отображаются правильные имя пользователя и идентификатор.

Мне просто нужны столбцы имени пользователя и идентификатора из второй таблицы.

1 Ответ

0 голосов
/ 25 апреля 2018

РЕДАКТИРОВАТЬ: Обновлено на основе более четкого описания проблемы

Кажется, qwinsta.exe выводит свой текст в столбцах фиксированной ширины, поэтому следующие значения должны корректно заменить пробелы, чтобы дать действительный вывод CSV:

function Get-TSSessions
{
    param ($ComputerName = "SERVER")

    qwinsta /server:$ComputerName |
        ForEach-Object {$_ -replace "\s{2,18}","," } | 
            ConvertFrom-Csv
}

Get-TSSessions -ComputerName "SERVER2016" |
    Where-Object State -eq 'Disc' |
        Format-Table UserName, ID -AutoSize
...