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