среда, 15 сентября 2010 г.

Получаем список открытых сессий при помощи скрипта 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 комментария:

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

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

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

    $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

    ОтветитьУдалить