четверг, 30 мая 2013 г.

[DELPHI] Делаем свой браузер терминальных сессий Terminal Services Session Browser

ВАЖНО (обновлено 28.12.2016)! В Windows Servers 2012/R2 решены проблемы с отображением информации и управлением сессиями). Вот прямая ссылка на версию для Windows Server 2012/R2.

Раз у нас есть скрипт, который получает информацию с фермы терминальных серверов, почему бы не сделать программу-оболочку, которая периодически читает этот файл и предоставляет конечному пользователю информацию в удобоваримом виде с усовершенствованным функционалом оснастки Remote Desktop Services Manager.
Так как последняя программа компании Microsoft часто зависает и глючит (!), было принято решение сделать подобного рода программу. Причем, имея штат техподдержки (например, 10 человек), программу можно сделать серверной, выложив в общий доступ как выходной файл скрипта, который получает информацию о терминальных сессиях, так и саму программу. Выгода здесь очевидна - снижение сетевых запросов к терминальным серверам или к службе брокера.
Для среды программирования я выбрал Delphi 2010. В принципе, в программе нет ничего сложного, пара таймеров, один из который запускает скрипт, а другой считывает выходной файл, да таблица, куда грузятся данные. Ну и несколько кнопок с действиями. Остальное уже мелочи.
Итак, представляю программу Terminal Services Session Browser (скачать). Работать она может в двух режимах: клиентском и серверном. 
В клиентском режиме информация в программу загружается из выходного файла сценария PowerShell, который находится в общем доступе. Сам же сценарий периодически запускается на определенном сервере из планировщика задач Windows. Такой вариант подойдет для среднего или большого отдела техподдержки.
В серверном режиме программа сама запускает этот сценарий и подойдет тем, кто не хочет заморачиваться с планировщиком задач или является единственным администратором. Для корректного выполнения сценария должен быть установлен Windows PowerShell 1.0, модуль Active Directory (в случае, если используется раскрытие доменной группы безопасности), модуль PSTerminalServices (для получения информации о терминальных сессиях).

Общий вид программы:



Глобальные настройки программы хранятся в INI-файле в папке с программой. 

Пользовательские настройки хранятся в реестре в контексте пользователя.

Программа умеет вести журнал событий, а также создавать необходимый сценарий на основе списка компьтеров или доменных групп групп безопасности:



В частности, в данном примере был получен сценарий такого содержания:

 

Для выполнения дествий в программе используются общепринятые команды для администрирования терминальных серверов: shadow, tsdiscon, msg, rwinsta, logoff, ping. Соответствующие файлы должны находиться в системной папке Windows.

Изначально программа задумывалась как замена Remote Desktop Services Manager, поэтому было сделано все возможное, чтобы она работала сутками, не глючила и не зависала. Соотвественно, программа рассчитана на CSV-формат выходного файла сценария PowerShell, вот пример:

"TS-01","61","Active","192.168.203.103","HQ-PC-015","RDP-Tcp#20","DOMAIN\user-016","30.05.2013 9:36","00:00:14.7671919"

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

Вот прямая ссылка на программу Terminal Services Session Browser v1.0 (для Windows7/Windows Server 2008/R2).

5 комментариев:

  1. На server 2008 r2 ничего не показывает...

    ОтветитьУдалить
  2. Тишина... А жаль. Хочется ответов на вопросы: если не работает, то где копать?

    ОтветитьУдалить
    Ответы
    1. К сожалению, редко захожу :(

      1. Убедиться в установленном модуле PSTerminalServices в папке C:\Windows\System32\WindowsPowerShell\v1.0\Modules

      2. Запустить программу под админом, ввести в список серверов localhost, подождать

      3. Проверить в Powershell, работает ли вообще корректно модуль PSTerminalServices

      4. Проверить, создаются ли файлы логов в выходных папках

      5. Запустить вручную из Powershell сгенерированный скрипт

      Удалить
  3. В ручную скрипт отрабатывает, в программе информация отображается, но через программу скрипт не запускается по интервалу.

    ОтветитьУдалить
    Ответы
    1. Думаю, нужно разрешить выполнение скриптов в системе, Set-ExecutionPolicy Unrestricted, или пересохранить скрипт в Powershell ISE.

      Удалить