Управление сервером приложений 1С с помощью PowerShell

22.05.12

База данных - Инструменты администратора БД

Примеры скриптов PowerShell для управления сервером 1С с помощью  менеджера COM-соединений
"Выгонялка" пользователей 1С, которая умеет:
1) устанавливать блокировку соединений ИБ
2) отсоединять сессии пользователей выбранной ИБ или выбранного кластера
3) перезапускать рабочие процессы выбранного кластера, если п.2 не помогает
4) рестартовать сервис агента 1С

В идеальном мире администратор сервера 1С:Предприятие должен установить сервер приложений, используя настройки по умолчанию и забыть о нём навсегда или по крайней мере очень надолго.

В реальном мире перед администратором сервера приложений сразу же встает большое количество задач, решить которое можно только используя продвинутые методы интеграции. Такие как например менеджер COM-соединений сервера приложений. Описание его свойств и методом доступно в (страшно сказать) Синтакс-помощнике, в ветке Средства интеграции и администрирования -> Менеджер COM –соединений.

В то же время любимым продуктом администраторов серверов Windows для автоматизации различных рутинных процессов является PowerShell, который заменил устаревшие WSH\VBScript  скрипты и архаичные BAT-файлы, начиная с Windows Server 2003.

Осталось только объединить возможности двух «подсистем», написав скрипт на PowerShell, который будет управлять сервером приложений 1С, с помощью com-администратора. 

Первая и самая простая задача из «реального мира» – перезапуск сервиса «Агент сервера 1С» по расписанию (вернее стоп-старт с таймаутом, из-за особенностей работы агента сервера). На PowerShell это можно сделать по разному, например так:

Get-service "1C:Enterprise 8.2 Server Agent*" | stop-service

Start-Sleep -s 40

Get-service "1C:Enterprise 8.2 Server Agent*" | start-service

 В расписание, как обычно мы скрипт поставим в шедулере Windows.

Теперь вторая задача из «реального мира», уже посложнее.

 Предположим на одном сервере 1С запущено несколько кластеров, стоит задача «выгнать всех пользователей» только одного кластера. Причем известно, что некоторые особенно упорные пользователи из консоли серверов 1С не выгоняются, и что помогает в таком случае только перезапуск рабочих процессов, на которых они находятся.

Для PowerShell это тоже не слишком сложная задача:

# Сценарий разрывает все сессии пользователей во всех ИБ на выбранном кластере сервера приложений 1С
# Если часть сессий остается активными после этого, то он останавливает все рабочие процессы кластера

# Параметры запуска сценария: адрес сервера, основной порт кластера
$SrvAddr = "tcp://y001-ap-01:1640"

$MainPort = "5641"
########################################
$V82Com = New-Object -COMObject "V82.COMConnector"
# Подключение к агенту сервера

$ServerAgent = $V82Com.ConnectAgent($SrvAddr)
$ClusterFound = $FALSE
#Получим массив кластеров сервера

$Clasters = $ServerAgent.GetClusters()
foreach ($Claster in $Clasters)
{

if ($Claster.MainPort -eq $MainPort)
{
$ClusterFound = $TRUE
break
}
}

if (!($ClusterFound))
{
break
}

# Аутентификация к выбранному кластеру
# если у пользователя, под которым будет выполняться сценарий нет прав на кластер,
# можно прописать ниже имя пользователя и пароль администратора кластера

$ServerAgent.Authenticate($Claster,"","")

#получаем список сессий кластера и прерываем их
$Sessions = $ServerAgent.GetSessions($Claster)
write-host "Разрывается" $Sessions.Count "сессий..."
foreach ($Session in $Sessions)
{
$ServerAgent.TerminateSession($Claster,$Session)
}
if (($Sessions.Count -eq 0))
{
break
}

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

# Получаем список рабочих процессов кластера
$WorkingProcesses = $ServerAgent.GetWorkingProcesses($Claster)

foreach ($WorkingProcess in $WorkingProcesses)
{
if ($WorkingProcess.Running -eq 1)
{
write-host "Останавливаем процесс с PID =" $WorkingProcess.PID
#!!!здесь хорошо бы проверить что компьютер с которого запущен сценарий это выбранный в параметрах запуска сервер приложений 1С
Stop-Process $WorkingProcess.PID -Force

}

}

$V82Com = ""

 

Как видите в скрипте мы используем только методы объекта «Соединение с агентом сервера», т.е. работает на уровне кластера, а не на уровне конкретной информационной базы.

Так что следующей задачей будет например такая: поставить блокировку соединений на конкретную информационную базу. Это уже потребует использование объекта «Соединение с рабочим процессом» и аутентификации в конкретную ИБ.

# Сценарий устанавливает блокировку соединений в выбранной ИБ на выбранном кластере сервера приложений 1С

# Параметры запуска сценария: адрес сервера, основной порт кластера, информационная база

$SrvAddr = "tcp://y001-ap-02:1640"

$MainPort = "5641"

$InfoBaseName = "aspb4"

$V82Com = New-Object -COMObject "V82.COMConnector"

 # Подключение к агенту сервера

 $ServerAgent = $V82Com.ConnectAgent($SrvAddr)

$ClusterFound = $FALSE 

$InfoBaseFound = $FALSE              

#Получим массив кластеров сервера

 $Clasters = $ServerAgent.GetClusters()

foreach ($Claster in $Clasters)

{

 

if ($Claster.MainPort -eq $MainPort)

    {

    $ClusterFound = $TRUE    

    break

    }

}

if (!($ClusterFound))

  {

   break

  }

# Аутентификация к выбранному кластеру

# если у пользователя под которым будет выполняться сценарий нет прав на кластер,

# можно прописать ниже имя пользователя и пароль администратора кластера

 $ServerAgent.Authenticate($Claster,"","")

 

 # Получаем список рабочих процессов кластера

 $WorkingProcesses = $ServerAgent.GetWorkingProcesses($Claster)

                   

foreach ($WorkingProcess in $WorkingProcesses)

  {                    

    if (!($WorkingProcess.Running -eq 1) )

    {

        continue   

    }

  

   $CWPAddr = "tcp://"+$WorkingProcess.HostName+":"+$WorkingProcess.MainPort  

   $CWP= $V82Com.ConnectWorkingProcess($CWPAddr)

   $CWP.AddAuthentication("", "")

 

    $InfoBases =$CWP.GetInfoBases()

 foreach ($InfoBase in $InfoBases)

   {

   if ($InfoBase.Name -eq $InfoBaseName )

     {

       $InfoBaseFound = $TRUE    

       break

     }

   }

 

  if (!($InfoBaseFound))

  {

   write-host "Не найдена указанная в параметрах запуска ИБ..."

   break

  }

 

 # Устанавливаем блокировку соединений ИБ

 $InfoBase.ConnectDenied = $True

 $CWP.UpdateInfoBase($InfoBase)               

  } 

$V82Com = ""


Вы можете соединить возможности второго и третьего сценария и получить «абсолютное  оружие» для отсоединения пользователей от конкретной ИБ, для проведения каких-либо регламентных работ. 

Вообще обилие свойств и методов COM-администратора позволяет решать совершенно различные задачи,  а не только связанные с «любимой» задачей администраторов «выгнать пользователей» .

Например, на постоянной основе получать объектные блокировки в конкретной ИБ и собрав статистику принять решение о недостатках модели метаданных.

Или собирать статистику о соединениях на кластере, чтобы ответить на вопрос «куда ушли все свободные лицензии?» (нетривиальная задача в корпоративной системе с кучей терминальных серверов, большим количеством ИБ и клиентов).

 В итоге я надеюсь это статья поможет вам приблизиться к решению вашей «задачи из реального мира».


См. также

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7883    59    23    

69

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

16800 руб.

06.12.2023    8887    42    5    

74

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8500 руб.

10.11.2023    10465    36    25    

61

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3120 руб.

14.01.2013    188062    1140    0    

912

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    32709    106    152    

73

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    72806    627    45    

85

Инструменты администратора БД Системный администратор Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    62841    94    59    

79

Инструменты администратора БД Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Многие сталкиваются с проблемой когда изображения, находящиеся в базе разные по объему и размерам. Менеджеры могут добавить файлы в очень высоком разрешении, объемом свыше 20 Мегабайт. База данных становится слишком большой, выгрузка на сайт идёт медленно и требуется много место на хостинге. Как сжать картинки и уменьшить размер базы 1С? Это можно сделать с помощью данной обработки. Существует возможность выбрать различные варианты для того чтобы уменьшить картинки: в разы, в процентах от первоначального объема, а также сделать картинки одинаковой ширины. В результате размер базы 1С значительно сократится (в зависимости от количества и размера картинок), а изображения станут небольшого объема, равными по ширине, почти без потери качества. Работает на управляемых формах для УТ 11, КА, ERP.

3000 руб.

21.07.2022    9844    7    4    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. squad 181 24.05.12 08:11 Сейчас в теме
Хотел бы добавить пару важных вещей, вроде бы понятных, но в статье это явно не написано:

1) Скрипт можно запускать с любого компьютера на котором установлены компоненты 1С Администрирование сервера.
Важно лишь только чтобы версии платформы на компьютере и на сервере при этом совпадали.
Ну и естественно, ели вы выполняете остановку рабочих процессов с помощью stop-process, то такой cmdlet имеет смысл выполнять только на самом сервере.

2) При установке сервера 1С по умолчанию список администраторов кластера пуст. И любой(!) пользователь может подключиться и использовать методы com-соединения.
Теоретически это дыра в модели безопасности которую может использовать злоумышленник.
Я бы рекомендовал сразу после установки "закрывать" эту дырку назначением администраторов кластера (сквозной аутентификацией к домену желательно чтобы не "потерять" пароль).
2. kapustinag 25.05.12 11:36 Сейчас в теме
...на постоянной основе получать объектные блокировки в конкретной ИБ ...

Актуальная вещь для нас сейчас, в связи с участившимися случаями блокировок при проведении документов.
С помощью каких методов и свойств это можно сделать? Удастся при этом получить метаданные заблокированного объекта, и даже представление объекта - если это конкретный документ, например?
3. squad 181 25.05.12 12:35 Сейчас в теме
(2) kapustinag,
Посмотрите в синтакс-помощнике свойство объекта Блокировка.
Можно запускать мониторинг этого свойства с небольшим интервалом (не более 5 сек), выгружать в текстовый файл, а потом консолидировать в Excel например и смотреть.
Это не слишком просто получается, проще конечно ЦУП пользоваться, если он есть.

Но вообще конечно поскольку ЦУП сам по себе создает нагрузку на продуктивную систему и не может применяться на постоянной основе, а блокировка вещь кратковременная и поймать её "вручную" сложно, для решения вашей задачи я бы посмотрел статистику по блокировкам на стороне СУБД (она собирается самим сервером, вы её просто используете).

Как это сделать ?
Если у вас MS SQL - почитайте про DMV, если DB2 - почитайте про Admin Routin Views.
4. kapustinag 25.05.12 12:56 Сейчас в теме
(3)

Спасибо. На стороне сервера БД (у нас MS SQL) статистика есть, но там в обозначениях СУБД. Долго добираться до этого объекта в 1С. Попробую через свойства объекта Блокировка.
5. squad 181 25.05.12 13:00 Сейчас в теме
(4) kapustinag,
Ну что значит долго, существует N-ое количество обработок которые покажут вам структуру таблицы СУБД = метаданные.
Тот же Enterprise Integrator например.
Или эта: http://infostart.ru/public/96424/
6. kapustinag 26.05.12 09:24 Сейчас в теме
(5)
Да, есть у меня одна из таких обработок, с Инфостарта когда-то раньше брал. Не EI. Показывает для объектов метаданных соответствующие объекты MS SQL. С ее помощью можно добраться до объекта, конечно. Хочется, чтобы обработка сразу показывала список заблокированных объектов ИБ, то есть чтобы не приходилось руками с помощью одной или нескольких доп.обработок определять, какой объект ИБ соответствует заблокированному объекту SQL.

По синтакс-помощнику посмотрел; есть надежда, что с помощью Блокировка.Object (выдает строку - Представление идентификатора заблокированного объекта базы данных) удастся получить то, что нужно. Буду пробовать.
7. пользователь 09.06.12 12:35
Сообщение было скрыто модератором.
...
8. Varies 19.06.12 15:14 Сейчас в теме
Спасибо. Этот метод выглядит более привлекательно нежели использование скриптов и батов.
9. Slepen 25.02.13 13:17 Сейчас в теме
Спасибо, очень удобно
10. cheburashka 43 01.10.13 12:27 Сейчас в теме
Спасибо за подробное разъяснение, очень актуально.
11. bruho 31.07.18 15:26 Сейчас в теме
Спасибо большое!

Кучу времени сэкономили для написание своего скрипта !
Оставьте свое сообщение