Автоматическое подключение баз 1С, за минуту
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов России Pyatilistnik.org. В прошлый раз я вас научил возвращать в Windows 10 меню "Загрузка последней удачной конфигурации" при нажатии клавиши F8. В сегодняшней статье я вам покажу, как автоматизировать подключение баз 1С пользователю, на его рабочем столе или терминальной сессии. Это полезно, так как снимает много ручной и рутинной работы со стороны системного администратора или программиста 1С.
Описание инфраструктуры
И так предположим, что у вас есть большое количество сотрудников, кто в своей работе использует программу 1С 8. Вам периодически приходится подключать им базы данных, тратя на это много времени. У части пользователей может быть локальный клиент 1С, кто-то может работать на RDS ферме, по удаленке. Вы хотели бы, чтобы каждому пользователю подключались его персональные базы 1С при входе в компьютер или терминал, а так же при необходимости простого ручного обновления в виде ярлыка, который запускает сценарий, невидимый для пользователя. Мои коллеги 1С написали скрипт, который на сетевую шару, выгружает файл "Имя домена-Логин пользователя.v8i" со списком персональных баз пользователя. Данный файл нам нужно будет подкладывать при входе сотрудника в его рабочее окружение.
Реализация подгрузки баз 1С
Когда пользователь открывает "1C Предприятие", то при отсутствии в конфигурационном файле путей до базы данных, он увидит картину:
За список баз данных, отвечают два файла:
- 1cestart.cfg - в данном файле прописываются некоторые параметры и путь до файла .v8i
- ibases.v8i - тут прописываются параметры подключения к базам данных.
Располагаются они в локальном профиле пользователя по пути:
Если вы не видите папку AppData, то вам нужно включить просмотр скрытых папок и файлов.
Алгоритм такой:
- На сетевую шару выгружается файл имя домена.логин.v8i с персональным списком баз 1С
- Данный файл нужно копировать при входе пользователя на рабочую станцию или терминал в расположение C:\Users\логин\AppData\Roaming\1C\1CEStart\
- Если папки 1CEStart нет, то создать ее
- Создать или заменить файл 1cestart.cfg
- Прописать в файле 1cestart.cfg путь до файла со списком баз: CommonInfoBases=C:\Users\логин\AppData\Roaming\1C\1CEStart\файл имя домена.логин.v8i
- Создать на рабочем столе файл exe, который в случае предоставления пользователю новых прав на другие базы данных 1С, запустит скрипт локально и скопирует новый файл со списком баз, что сотруднику не пришлось производить выход из системы.
Код скрипта монтирования баз 1С
Для решения моей задачи, я написал скрипт PowerShell, который буду использовать при логине пользователя, ниже его текст с объяснениями.
# Разработчик скрипта Pyatilistnik.org
# переменная пути 1с C:\Program Files (x86)\1cv82 (8.2)
$path_1c82 = "C:\Program Files (x86)\1cv82"
# переменная пути 1с C:\Program Files (x86)\1cv8 (8.3)
$path_1c83 = "C:\Program Files (x86)\1cv8"
# переменная пути 1с C:\Program Files\1cv82 (8.2)
$path_1c82x64 = "C:\Program Files\1cv82"
# переменная пути 1с C:\Program Files\1cv8 (8.3)
$path_1c83x64 = "C:\Program Files\1cv8"
# Проверяем наличие в системе 1С, если нет то завершаем скрипт
if ((! (Test-Path "$path_1c83" -PathType Container -ErrorAction SilentlyContinue)) -and (! (Test-Path "$path_1c82" -PathType Container -ErrorAction SilentlyContinue)) `
-and (! (Test-Path "$path_1c82x64" -PathType Container -ErrorAction SilentlyContinue)) -and (! (Test-Path "$path_1c83x64" -PathType Container -ErrorAction SilentlyContinue)))
{
Write-Output "Paths $path_1c83 and $path_1c82 don't exist"
Break
}
# Создаем переменную для сетевой папки с расположением файл с базами данных
$shared_folder = "\\root\1cbase\1CDatabaseLists"
# Создаем переменную копируемого файла с базами
$file_v8i = "$($env:USERDOMAIN)-$($env:USERNAME).v8i"
# Создаем переменную для расположения, куда копируем файл
$1CEStart_folder = "$($env:APPDATA)\1C\1CEStart"
# Проверяем наличие папки 1CEStart, если ее нет, то создаем
if (! (Test-Path $1CEStart_folder -PathType Container -ErrorAction SilentlyContinue))
{
New-Item $1CEStart_folder -ItemType D -Force
}
# Копируем файл со списками баз в C:\Users\username\Application Data\1C\1CEStart\
Copy-Item "$shared_folder\$file_v8i" -Destination "$1CEStart_folder\"
# Если файл 1cestart.cfg нет, то создаем его, перезаписываем его содержимое для пользовательской строки CommonInfoBases=путь до файла v8i ($1CEStart_folder\$file_v8i) `n переносит на новую строку
$Pattern = "CommonInfoBases=$1CEStart_folder\$file_v8i" #-replace ("\\", "\\")
# Получаем содержимое файла 1cestart.cfg
$1cestart_cfg_content = Get-Content "$1CEStart_folder\1cestart.cfg" -ErrorAction SilentlyContinue
# Запоминаем его содержимое и удаляем его
Remove-Item "$1CEStart_folder\1cestart.cfg" -Force -ErrorAction SilentlyContinue
# Создаем файл 1cestart.cfg если его нет
$file_added = $null
# Ищем наличие строки CommonInfoBases=$1CEStart_folder\$file_v8i и удаляем ее с заменой на правильную
foreach ($line in $1cestart_cfg_content)
{
if ($line -like "$Pattern*")
{
Write-Output "Found match"
$line = "`n$Pattern`n"
$file_added++
}
$line | Out-File "$1CEStart_folder\1cestart.cfg" -Append
}
# Если файла нет, то создаем его с нужной строкой
if ($file_added -eq $null)
{
Write-Output "CommonInfoBases=$1CEStart_folder\$file_v8i`n" | Out-File "$1CEStart_folder\1cestart.cfg" -Append
}
Далее создаем групповую политику. В политике нужно настроить два момента:
- Первое, это немедленное выполнение скрипта при входе, без 5-ти минутной задержки.
- Второе, это в ветке "Конфигурация пользователя - Политики - Конфигурация Windows - Сценарии входа/выхода". Далее открываем вкладку "Сценарии powerShell", выбираем наш скрипт и обязательно выставите пункт "Запускать сценарии оболочки Windows PowerShell перед другими сценариями входа"
Залогинившись, открыв "1C Предприятие" я вижу список нужных мне баз. Пройдя в каталог AppData. я наблюдаю два нужных мне файла.
Открыв 1cestart.cfg я вижу путь до моего файла.
Так же я создал EXE файл обновляющий в ручную список баз, заново копирующий нужный мне файл. Что самое интересное, что не требуется административных прав и понижение политики безопасности. Как конвертировать PS1 в EXE я уже рассказывал.
На этом у меня все. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.