Теперь поговорим об операциях с сессиями.
Частой задачей является просмотр идентификатора сессии и получение списка открытых сессий. Напишем для этого соответствующий скрипт.
В объектной модели 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 коммент.:
А в БД содержимое таблицы dvsys_sessions - не то же самое? оно не сожрет сессии DV на себя.
Да, в данной таблице хранится список созданных сессий. Альтернативный вариант: подключиться к БД
Тогда уж сразу группировать хотя бы по пользователям результаты:
Что то наподобие:
$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
Отправить комментарий