gifts2017

Автоматическое формирование списка баз на терминальном сервере на основе групп пользователей (logon-скрипт)

Опубликовал Сергей Королев (extrim-style) в раздел Администрирование - Системное

Logon-скрипт («батник») для терминального сервера, формирующий необходимый список баз для каждого пользователя в зависимости от принадлежности пользователя к группе.

Исходные данные:

- терминальный сервер (у меня на WS2008R2)

- пользователи заходят на терминал под основной рабочей учеткой домена

- пользователям необходим список баз в различных комбинациях


 Задача:

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


Прочие решения:

1. http://habrahabr.ru/post/179405/ - минус решения в сложности формирования комбинаций баз, для каждой комбинации приходится заводить отдельный каталог с настройками.

2. http://infostart.ru/public/147404/ - привязка к Active Directory. В моем случае нет такой необходимости, т.к. для нужд 1С используется один терминальный сервер. Более актуально для нескольких серверов (исходный код по запросу).


Решение:

Подготавливаем на сервере необходимую структуру рабочих файлов и исходных данных:

1. Необходима утилита Ifmember.exe из состава пакета Windows Server 2003 Resource Kit Tools, которая проверяет наличие пользователя в группе. Скачиваем, устанавливаем.

2. Создаем основной рабочий каталог, в моём случае D:\ListOfBases.

3. Внутри основного рабочего каталога создаем:

   1) каталог Default, содержит дефолтные файлы. Содержимое каталога:

       - файл 1CEStart.cfg (в кодировке 1251 ANSI), содержит путь к каталогу шаблонов и признак необходимости поиска локального ключа защиты:

         ConfigurationTemplatesLocation=D:\CONFIG_1C8\tmplts82

         UseHWLicenses=1

      - пустой файл ibases.v8i (скопирован, очищен)

   2) файлы вида DB_[ИмяБазы].v8i. Каждый файл содержит описание для одной базы.

   3) командный файл makecfg.cmd (листинг ниже). Меняем путь для переменной mainpath на свой. Меняем имена групп пользователей и наименования баз на свои в разделе     «список баз».

   4) (необязательно) в моем случае также одна из баз используется не только на терминале, но и локально. Описание базы находится в расшаренном каталоге D:\ListOfBases\CommonBases. При необходимости – создаем.

4. Создаем необходимые группы пользователей (ServerManager – Configuration – LocalUsersandGroups – Groups), у меня вида User1C8_[ИмяБазы]. Добавлям пользователей в группы.

5. Устанавливаем скрипт в качестве logon-скрипта (gpedit.msc – LocalGroupPolicyEditor – LocalComputerPolicy – UserConfiguration – WindowsSettings – Scripts(Logon\Logoff) – Logon– указываем файл makecfg.cmd).

 

Листинг файла makecfg.cmd:

 

::@echo off

 

::для добавления новой базы - новую базу добавляем в ===списке баз===

 

::структура основного рабочего каталога:

::каталог Default - файл 1CEStart.cfg, содержимое файла:

::                        ConfigurationTemplatesLocation=D:\CONFIG_1C8\tmplts82

::                        UseHWLicenses=1

::                      - файл ibases.v8i (скопирован, очищен)

::файлы DB_[ИмяБазы].v8i, каждый файл содержит описание одной базы

::файл makecfg.cmd - данный командный файл

 

::===============установка переменных==========================

::основной рабочий каталог

set mainpath=D:\ListOfBases

::каталог дефолтных файлов

set configfolder=%mainpath%\Default

::каталог конфигурационных файлов пользователя

set userfolder=C:\Users\%username%\AppData\Roaming\1C\1CEStart

::путь к ifmember.exe

set ifmember="C:\Program Files (x86)\Resource Kit\IFMEMBER.EXE"

::=============================================================

 

::=================проверка и создание необходимой структуры===============

::если каталог пользователя не существует - создаем

if not exist %userfolder% mkdir %userfolder%

 

::данная строка необходима для замены файла 1CEStart.cfg на файл с кодировкой 1251,

::иначе - допишет иероглифы. Временно.

del %userfolder%\1CEStart.cfg

 

::если файла конфигурации нет - копируем дефолтный

if not exist %userfolder%\1CEStart.cfg copy /y %configfolder%\1CEStart.cfg %userfolder%

::если файла со списком баз нет - копируем дефолтный (пустой)

if not exist %userfolder%\ibases.v8i copy /y %configfolder%\ibases.v8i %userfolder%

::====================================================================

 

::===================список баз=========================================

%ifmember% User1C8_Base1

if %errorlevel% EQU 1 (call :sub1 Base1) else (call :sub2 Base1)

 

%ifmember% User1C8_Base2

if %errorlevel% EQU 1 (call :sub1 Base2) else (call :sub2 Base2)

 

%ifmember% User1C8_Base3

if %errorlevel% EQU 1 (call :sub1 Base3) else (call :sub2 Base3)

 

::%ifmember% [ИмяНовойГруппы]

::if %errorlevel% EQU 1 (call :sub1 [ИмяНовойБазы]) else (call :sub2 [ИмяНовойБазы])

 

::==================отдельный каталог (расшаренный)========================

%ifmember% User1C8_Base4

::второй параметр - слеш + имя расшаренного каталога

if %errorlevel% EQU 1 (call :sub1 Base4 \CommonBases) else (call :sub2 Base4 \CommonBases)

::=====================================================================

 

exit

 

::===================================пользователь в группе===========================================

:sub1

findstr.exe /b /v /c:"CommonInfoBases=%mainpath%%~2\DB_%~1.v8i" %userfolder%\1CEStart.cfg > %userfolder%\1CEStart.tmp

fc /b %userfolder%\1CEStart.cfg %userfolder%\1CEStart.tmp

::%errorlevel%=0 - файлы одинаковы, строка не найдена, добавляем; иначе - ничего не делаем (удаляем tmp)

if %errorlevel% EQU 0 (echo CommonInfoBases=%mainpath%%~2\DB_%~1.v8i>> %userfolder%\1CEStart.cfg)

del %userfolder%\1CEStart.tmp

exit /b

::================================================================================================

 

::===================================пользователь не в группе==========================================

:sub2

findstr.exe /b /v /c:"CommonInfoBases=%mainpath%%~2\DB_%~1.v8i" %userfolder%\1CEStart.cfg > %userfolder%\1CEStart.tmp

fc /b %userfolder%\1CEStart.cfg %userfolder%\1CEStart.tmp

::%errorlevel%=1 - файлы разнятся, строка найдена, заменяем; иначе - ничего не делаем (удаляем tmp)

if %errorlevel% EQU 1 (

del %userfolder%\1CEStart.cfg

ren %userfolder%\1CEStart.tmp 1CEStart.cfg

) else del %userfolder%\1CEStart.tmp

exit /b

::================================================================================================

 

 

Комментарии:

1. Изначально файл 1CEStart.cfg в кодировке 1200 UTF-16, у меня используется 1251 ANSI (в т.ч. для батника). 

2. Работу батника необходимо проверить. В случае несовпадений кодировок при добавлении базы в файл 1CEStart.cfg запишутся иероглифы. Код в данном виде переписывает файл 1CEStart.cfg принудительно при каждом входе пользователя на терминал в строке del %userfolder%\1CEStart.cfg. Данная строка требуется для замены имеющегося файла в дефолтной кодировке на файл в кодировке ANSI. После замены файлов у всех пользователей строку нужно закомментировать. В случае различия кодировок команда fc будет неправильно отрабатывать, показывая, что файл в кодировке UTF-16 длиннее. Для создания файла в необходимой кодировке можно использовать FAR Manager.

3. Для тестирования при непосредственной установке в качестве logon-скрипта можно использовать виртуальную машину (VirtualBox + WS2008R2)


В архиве каталог ListOfBases + Ifmember.exe.

Скачать файлы

Наименование Файл Версия Размер
ListOfBases 4
.7z 78,95Kb
11.07.14
4
.7z 78,95Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Виталий Барилко (Diversus) 12.07.14 17:17
Рекомендую так же разработку Softonit Control, которая позволяет гибко настраивать видимые информационные базы пользователям, так же есть интеграция с Active Directory.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа