Автоматическое подключение баз 1С, за минуту

Обновлено 18.04.2022

powershell 1c logoДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов России Pyatilistnik.org. В прошлый раз я вас научил возвращать в Windows 10 меню "Загрузка последней удачной конфигурации" при нажатии клавиши F8. В сегодняшней статье я вам покажу, как автоматизировать подключение баз 1С пользователю, на его рабочем столе или терминальной сессии. Это полезно, так как снимает много ручной и рутинной работы со стороны системного администратора или программиста 1С.

Описание инфраструктуры

И так предположим, что у вас есть большое количество сотрудников, кто в своей работе использует программу 1С 8. Вам периодически приходится подключать им базы данных, тратя на это много времени. У части пользователей может быть локальный клиент 1С, кто-то может работать на RDS ферме, по удаленке. Вы хотели бы, чтобы каждому пользователю подключались его персональные базы 1С при входе в компьютер или терминал, а так же при необходимости простого ручного обновления в виде ярлыка, который запускает сценарий, невидимый для пользователя. Мои коллеги 1С написали скрипт, который на сетевую шару, выгружает файл "Имя домена-Логин пользователя.v8i" со списком персональных баз пользователя. Данный файл нам нужно будет подкладывать при входе сотрудника в его рабочее окружение.

Реализация подгрузки баз 1С

Когда пользователь открывает "1C Предприятие", то при отсутствии в конфигурационном файле путей до базы данных, он увидит картину:

Список информационных баз пуст. Добавить в список информационную базу

Список информационных баз пуст

За список баз данных, отвечают два файла:

  • 1cestart.cfg - в данном файле прописываются некоторые параметры и путь до файла .v8i
  • ibases.v8i - тут прописываются параметры подключения к базам данных.

Располагаются они в локальном профиле пользователя по пути:

C:\Users\логин пользователя\AppData\Roaming\1C\1CEStart

Если вы не видите папку AppData, то вам нужно включить просмотр скрытых папок и файлов.

Алгоритм такой:

  1. На сетевую шару выгружается файл имя домена.логин.v8i с персональным списком баз 1С
  2. Данный файл нужно копировать при входе пользователя на рабочую станцию или терминал в расположение C:\Users\логин\AppData\Roaming\1C\1CEStart\
  3. Если папки 1CEStart нет, то создать ее
  4. Создать или заменить файл 1cestart.cfg
  5. Прописать в файле 1cestart.cfg путь до файла со списком баз: CommonInfoBases=C:\Users\логин\AppData\Roaming\1C\1CEStart\файл имя домена.логин.v8i
  6. Создать на рабочем столе файл 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 перед другими сценариями входа"

Монтирование баз 1с через PowerShell

Залогинившись, открыв "1C Предприятие" я вижу список нужных мне баз. Пройдя в каталог AppData. я наблюдаю два нужных мне файла.

Монтирование баз 1с при входе в компьютер

Открыв 1cestart.cfg я вижу путь до моего файла.

Автоматическое подключение баз 1С через powershell

Так же я создал EXE файл обновляющий в ручную список баз, заново копирующий нужный мне файл. Что самое интересное, что не требуется административных прав и понижение политики безопасности. Как конвертировать PS1 в EXE я уже рассказывал.

добавление баз 1с на терминальном сервере

На этом у меня все. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *