RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (1) Администрирование DocsVision (60) Атрибутивный поиск (3) База данных (24) Базы знаний (1) Безопасность (1) Бизнес-процессы (20) Блог (2) Вы увидите это первыми (1) Групповые политики (1) Диаграммы (2) Задания (2) Интеграция (2) Карточки DocsVision (14) Конструктор Решений (11) Маркетинг и продажи (4) Навигатор (3) Новое (3) Новости (32) Опрос (4) Опросы DocsVision (4) Оптимизация (3) Отчеты (2) Ошибки (1) Поддержка (14) Полезные ссылки (1) Представления (4) Производительность (5) Разбор полетов (18) Разработка для Workflow (7) разработка карточек (2) Разработка на платформе DocsVision (41) Разработка решений (43) Расширение платформы (1) Расширенные отчеты (9) Решения на платформе DocsVision (6) Сервисы DocsVision (3) Сканеры (3) Справочник сотрудников (1) Справочник типов (1) Установка (1) Утилиты (13) Шлюз в SharePoint (8) Штрихкод (2) Cкрипты карточек (7) DocsVision внутри (1) DocsVision Live (1) FileStream (1) FireFox (2) Opera (1) Powershell (5) Safari (1) SharePoint2007 (1) SharePoint2010 (2) Silverlight (1) UltraViews (1) Vista (1)

Получаем список открытых сессий при помощи скрипта Powershell

Многие операции я предпочитаю делать из командной строки, для чего использую консоль Powershell. О перезагрузке сервисов я уже писал ранее.
Теперь поговорим об операциях с сессиями.

Частой задачей является просмотр идентификатора сессии и получение списка открытых сессий. Напишем для этого соответствующий скрипт.

В объектной модели DocsVision уже есть соответствующий класс DocsVision.Platform.ObjectManager.SessionManager. А в его объекте метод GetOpenSessions. Поэтому вся задача разбивается на три:
  • Подключение сборки к скрипту PowerShell
  • Создание сессии и получение списка сессий
  • Вывод данных
 Поскольку сборка зарегистрирована, то подключать её будем по имени
[System.Reflection.Assembly]::LoadWithPartialName("DocsVision.Platform.ObjectManager")   
На вход наш скрипт будет принимать два аргумента: адрес сервера и имя базы.
[string]$ConnStr=$args[0]
[string]$Base=$args[1]
Есть поле для доработок - эти данные можно читать прямо из реестра.

Полный текст скрипта:
[System.Reflection.Assembly]::LoadWithPartialName("DocsVision.Platform.ObjectManager")        
[string]$ConnStr=$args[0]
[string]$Base=$args[1]

write-host($ConnStr)

# Создаем сессию
$SM = [DocsVision.Platform.ObjectManager.SessionManager]::CreateInstance()
$SM.Connect($ConnStr,$Base)
[DocsVision.Platform.ObjectManager.UserSession]$US=$SM.CreateSession()
Write-Host ("--------------------------------------------------------------------------------------")
write-host "YOUR SESSION ID: ", $US.ID
Try
{
    # Получаем открытые сессии
    [DocsVision.Platform.ObjectManager.InfoRowCollection]$Sessions = $SM.GetOpenSessions()
    write-host "SESSION COUNT: ", $Sessions.Count
    write-host ("Session ID`t`t`t","Account`t","Login time`t","Last access`t","Computer","IP") -Separator "`t"
    foreach ($Row in $Sessions)
    {
        write-host ($Row.Item(0),$Row.Item(1),$Row.Item(2),$Row.Item(3),$Row.Item(4),$Row.Item(5)) -Separator "`t"

    }
}
Finally
{
    $SM.CloseSession($US.ID)
}

Скачать скрипт

UPD: Будет работать на 4.5 и 4.3. На машине, на которой запускается скрипт как минимум должны стоять клиентские компоненты DocsVision.
UPD2: Пример запуска скрипта: get-dv45-sessions http://server/DocsVision/StorageServer/StorageServerService.asmx dv1966
Читать дальше

3 коммент.:

Viktor Fedorov комментирует...

А в БД содержимое таблицы dvsys_sessions - не то же самое? оно не сожрет сессии DV на себя.

Михаил Захаров комментирует...

Да, в данной таблице хранится список созданных сессий. Альтернативный вариант: подключиться к БД

Unknown комментирует...

Тогда уж сразу группировать хотя бы по пользователям результаты:
Что то наподобие:

$temp = @{}
foreach ($Row in $Sessions)
{
if ($temp.ContainsKey($Row.Item(1)))
{

}
else
{
#put it in:
$temp.Add($Row.Item(1),$Row.Item(1));
}
}
write-host $temp.Count

Отправить комментарий