Скрипт отключения неактивных сессий в 1С

Часто возникает задача автоматического отключения неактивных пользовательских сеансов в 1С.

Для того, чтобы выполнять эту процедуру по расписанию можно воспользоваться средствами, предоставляемыми COM-интерфейсом 1С. Такой подход позволяет использовать штатные механизмы 1С в сочетании с родными для ОС средствами автоматизации.

Пример скрипта на PowerShell, выполняющего отключение сеансов по расписанию:

# Переменные.
$server1C = «<Имя сервера>»
$bases = («<База1>»,»<База2>»)
$timeDelay = -10
$logFile = «<Путь к файлу лога>»
# Создается COM-объект подключения к 1С.
$connector = New-Object -Comobject «V83.COMConnector»
# Подключение к агенту на сервере.
$AgentConnection = $connector.ConnectAgent($server1C)
# Выбор кластера. Сейчас используется только один кластер, поэтому просто получаем единственный элемент.
$Cluster = $AgentConnection.GetClusters()[0]
# Авторизация.
$AgentConnection.Authenticate($Cluster,»»,»»)
# Для заданного списка баз в цикле получаем списки сессий и обрабатываем их.
foreach ($base in $bases)
{
$sessions1CtoTerminate = ($AgentConnection.GetSessions($Cluster) | Where-Object {$_.Infobase.Name -eq $base -and $_.AppId -ne «SrvrConsole» -and $_.AppId -ne «BackgroundJob» -and $_.LastActiveAt -lt ((Get-Date).AddHours($timeDelay))})
foreach ($session in $sessions1CtoTerminate)
{
$sessionToKillMsg = «Session ‘» + $session.infoBase.Name.ToString() + » — » + $session.userName.ToString() + » — » + $session.Host.ToString() + » — » + $session.AppID.ToString() + » — » + $session.StartedAt.ToString() + » — » + $session.LastActiveAt.ToString() + «‘ has been terminated at » + (Get-Date).ToString()
echo $sessionToKillMsg >> $logFile
$AgentConnection.TerminateSession($Cluster,$session)
}
}

Данный скрипт осуществляет отключение всех сессий, период неактивности для которых, составляет более 10 часов. При этом осуществляется дополнительная фильтрация и сессии административной консоли и фоновых заданий не отключаются. За это отвечают условия:

-and $_.AppId -ne «SrvrConsole» -and $_.AppId -ne «BackgroundJob»

 

Фильтрация по времени осуществляется с помощью условия:

-and $_.LastActiveAt -lt ((Get-Date).AddHours($timeDelay))

Get-Date возвращает текущее время, а его метод AddHours позволяет получить значение времени на 10 часов назад, просто добавив отрицательное смещение (-10 часов).

Если нет необходимости отключать сессии только в конкретных базах, то его можно еще больше упростить и заменить последний цикл по списку баз на перебор вообще всех сессий.

COM- интерфейс для 1С нельзя назвать очень богатым, однако практически все необходимые действия он позволяет выполнять. При работе из PowerShell можно использовать командлет Get-Member для просмотра свойств и методов COM-объектов. Единственный момент — некоторые свойства будут самостоятельными объектами, как, например свойство «Infobase» у сессии. Это самостоятельный объект, поэтому не стоит забывать, что для того, чтобы посмотреть, например, имя информационной базы из сессии не достаточно просто обратиться к свойству «Infobase», а необходимо обращаться к уже вложенному свойству «Infobase.Name»

Ну и еще одна тонкость — необходимо следить за разрядностью приложений. Так, например, если запустить PowerShell x64 и попытаться обратиться к x86 COM-объекту, то произойдет ошибка. В этом случае, можно запустить x86 PowerShell для корректной работы (он находится по следующему пути — %SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe).

Реклама

Резервное копирование в ESXi бесплатной редакции

Бесплатная редакция ESXi позволяет быстро развернуть удобный тестовый стенд или же выступить в роли хоста виртуализации для простых задач в небольшой инфраструктуре. Лицензионные ограничения накладываемые на этот продукт не позволяют его использовать для серьезных задач (речь именно о бесплатной редакции 🙂 ). Одними из наиболее неприятных ограничений, являются урезанные возможности таких средств управления, как PowerCli (фактически, режим работы read-only) или извечная проблема с резервным копированием. Этой проблеме, как раз и посвящена данная статья.

Как выяснилось, если очень захотеть, то можно и здесь найти решение. Недавно я наткнулся на скрипт, который позволяет выполнять резервное копирование виртуальных машин, а также удобный интерфейс управления к нему. Скрипт развивается сообществом VMware и познакомиться с ним можно здесь — http://communities.vmware.com/docs/DOC-8760 . Интерфейс управления называется mksbackup (http://www.magikmon.com/mksbackup/ghettovcb.en.html). Рассмотрим эту связку более подробно.

Читать далее

Outlook и фотографии.

Пару лет назад в блоге команды Exchange появился замечательный пост — http://blogs.technet.com/b/exchange/archive/2010/03/10/gal-photos-in-exchange-2010-and-outlook-2010.aspx . И действительно, сейчас использование фотографий стало фактически стандартом. Однако еще один интересный аспект – поддержка этих фотографий в актуальном виде. В частности, я недавно столкнулся с такой задачей.

Здесь будет небольшое лирическое отступлениеSmile.

Вообще, тема управления учетными записями сотрудников – давно уже стала очень насущной. Фактически, это отдельное направление IT, также как почта, СУБД, веб и т.д. Почитать подробнее можно тут — http://en.wikipedia.org/wiki/Identity_management

или, например, на русском – статья на хабре http://habrahabr.ru/post/123428/

Такие системы, как, например, Forefront Identity Manager (http://www.microsoft.com/en-us/server-cloud/forefront/identity-manager.aspx) позволяют полностью отслеживать весь жизненный цикл учетных записей, синхронизировать данные учетных записей, централизованно управлять различными системами авторизации и многое другое. Таким образом, одна из подзадач – централизованное управление учетными записями сотрудников, с которой я начинал эту заметку легко и штатно решается если в организации развернуто решение класса IDM. Однако, к сожалению, сейчас такие системы все еще редкость. Правда, оборотной стороной является тот факт, что подобные системы всегда сложны и без грамотного планирования и внедрения – скорее принесут вред, нежели пользу.

Собственно поэтому, мы решили сначала сделать небольшое самодельное решение, которое позволит уже сейчас выполнять базовые операции, такие как синхронизация фотографий, синхронизация данных сотрудников (должность, отдел, грейд и т.д.), управление членством в группах, а в дальнейшем уже подумать о внедрении готового IDM-решения.

В этой заметке, я как раз хотел бы рассказать о небольшой системе синхронизации фотографий.

Читать далее

Скрещивание ежа и ужа. Мониторинг доступности сайта с помощью WhatsUp Gold.

Тема мониторинга всегда была и будет актуальной. Регулярная проверка доступности служб, загруженности серверов, скорости ответа приложений и других параметров IT-сервисов, позволяет составить общую картину работы IT-инфраструктуры, выявить ее узкие места и оперативно обнаружить аварию. На рынке присутсвует достаточное количество систем мониторинга. В данной статье я опишу способ мониторинга работы веб приложения с помощью системы WhatsUp Gold.

В этой системе есть готовые мониторы, который позволяют выполнять различные проверки доступности веб-приложений, однако, иногда возникает задача, проверить механизм авторизации на сайте. И тут уже приходится идти на различные хитрости. В частности, штатный монитор, позволяющий мониторить контент веб-приложения, не умеет работать с формами авторизации. То есть, например, если на сервере используется basic-авторизация, он сможет ее пройти, а вот в случае, когда мы имеем дело с формами, он уже не поможет. В таком случае, на помошь может прийти свой самописный монитор. WhatsUp позволяет для этого использовать скрипты написанные на vbs и js (то есть, фактически штатный WSH). Признаюсь честно, написать на vbs парсер страницы с авторизацией у меня не хватило ни навыка, ни усидчивости и я решил посмотреть в сторону готовых решений.

После непродолжительного поиска, мне попался на глаза весьма интересный модуль — http://exchange.nagios.org/directory/Plugins/Websites,-Forms-and-Transactions/check-form-mechanize/details . Данный скрипт умеет проходить авторизацию и проверять контент на странице. Правда, есть одна загвоздка — он написан на питоне и предназначен для Nagios. Попробуем заставить его работать с нашей системой мониторинга 🙂

Читать далее