При автоматизации развертывания и настройки рабочих мест пользователей платформы «1С:Предприятие» системные администраторы часто сталкиваются с необходимостью динамического редактирования конфигурационного файла 1CEStart.cfg. Этот файл располагается в профиле каждого пользователя по пути %APPDATA%\1C\1CEStart\1CEStart.cfg и отвечает за ключевые параметры запуска платформы, включая пути к общим спискам информационных баз (файлам .v8i).
Основная сложность работы с этим файлом заключается в его кодировке. Платформа «1С» сохраняет свои конфигурационные файлы в двухбайтовом формате UTF-16 Little Endian (в среде Windows часто обозначаемом как UCS-2 LE) с обязательным маркером последовательности байтов BOM (Byte Order Mark). Попытки добавить строки в такой файл с помощью стандартных скриптов командной строки (.bat или .cmd) часто приводят к двум неприятным последствиям: новые параметры либо приклеиваются «хвостом» к предыдущей строке, ломая синтаксис файла, либо в документе появляются лишние пустые строки.
В этой статье мы подробно разберем физические причины такого поведения командного интерпретатора Windows, проанализируем структуру файлов конфигурации на уровне байтов и предложим несколько надежных вариантов решения этой задачи — от классического CMD до современного PowerShell и встроенных механизмов самой платформы «1С».
Посмотрим на поведение стандартного командного файла. По умолчанию консоль Windows работает в однобайтовой кодировке (например, CP866 или CP1251). Для работы с Юникодом в cmd.exe предусмотрен ключ /U, который заставляет внутренние команды выводить данные в формате UTF-16 LE.
Администраторы часто пытаются использовать следующую конструкцию для добавления пути к общей базе:
cmd /U /C echo CommonInfoBases=\\server\share\ibases.v8i>>"%Appdata%\1C\1CEStart\1CEStart.cfg"
При этом результатом часто становится склеивание добавленной строки с последней строкой файла. Если же администратор пытается принудительно вставить перевод строки с помощью echo. перед записью основного параметра, то в файле образуются лишние пустые строки:
cmd /U /C echo.>>"%Appdata%\1C\1CEStart\1CEStart.cfg"
cmd /U /C echo CommonInfoBases=\\server\share\ibases.v8i>>"%Appdata%\1C\1CEStart\1CEStart.cfg"
Проанализируем ситуацию на уровне байтов. В кодировке UTF-16 LE каждый символ кодируется двумя байтами. Символы перевода строки (CRLF) физически выглядят в HEX-редакторе следующим образом: 0D 00 0A 00. Оператор перенаправления потока >> работает на низком байтовом уровне файловой системы. Он не анализирует структуру текстового файла и не знает, на каком символе завершился файл.
Здесь возможны два сценария:
cmd /U /C echo начинает писать новые байты ровно с позиции указателя. В результате первый символ вашей новой строки записывается вплотную к последнему символу файла, превращая две разные настройки в одну нечитаемую строку.echo. для подстраховки, а перевод строки в оригинальном файле уже присутствовал, оператор запишет еще один CRLF. В итоге в конфигурационном файле образуется пустая строка. Хотя для платформы «1С» пустые строки обычно не критичны, это замусоривает файл и затрудняет его дальнейший автоматический анализ.Дополнительная проблема заключается в маркере BOM (Byte Order Mark). Символы FF FE в начале файла указывают операционной системе и программам на порядок байтов UTF-16 LE. Если файла 1CEStart.cfg изначально не существовало на компьютере пользователя, первая же команда перенаправления > или >> через cmd /U создаст файл без этого маркера. Без BOM-маркера платформа «1С» или текстовые редакторы могут некорректно распознать кодировку файла и проигнорировать все записанные в него параметры.
Разберем по шагам наиболее эффективные методы решения этой проблемы.
Поскольку файл 1CEStart.cfg на компьютерах пользователей обычно содержит всего несколько строк настроек, наиболее простым и безопасным решением в рамках обычного BAT-файла является его полная перезапись «с нуля». Это полностью решает проблему непредсказуемых окончаний строк и гарантирует чистую структуру файла без мусора.
Рассмотрим пример скрипта, который полностью формирует конфигурационный файл:
@echo off
set "cfg_path=%Appdata%\1C\1CEStart\1CEStart.cfg"
:: Создаем файл заново и пишем первую строку (оператор > заменяет файл)
cmd /U /C echo InstalledLocation=C:\Program Files\1cv8>"%cfg_path%"
:: Дописываем остальные параметры (оператор >> дописывает строки)
cmd /U /C echo CommonInfoBases=\\server\share\ibases.v8i>>"%cfg_path%"
cmd /U /C echo UseHWLicenses=1>>"%cfg_path%"
cmd /U /C echo ShowObsoleteVersions=0>>"%cfg_path%"
Преимущества этого метода: простой синтаксис, предсказуемый результат, отсутствие пустых строк в середине и в конце файла. Перевод строки гарантированно добавляется в конец каждой строки самой командой echo.
Современным стандартом администрирования операционных систем семейства Windows является среда PowerShell. Она изначально спроектирована для работы с объектами и текстовыми файлами в различных кодировках, автоматически управляя маркерами BOM и символами конца строки.
Ниже представлен скрипт PowerShell, который интеллектуально решает задачу: он проверяет наличие файла, корректно считывает его в кодировке Unicode (UTF-16 LE), проверяет, нет ли уже нужного параметра в файле, и при необходимости дописывает его без создания дублей и пустых строк.
$cfgPath = "$env:APPDATA\1C\1CEStart\1CEStart.cfg"
$newLine = "CommonInfoBases=\\server\share\ibases.v8i"
if (Test-Path $cfgPath) {
# Читаем файл с явным указанием кодировки UTF-16 LE (Unicode)
$content = Get-Content -Path $cfgPath -Encoding Unicode
# Проверяем, добавлена ли уже эта строка ранее
if ($content -notcontains $newLine) {
# Добавляем строку. PowerShell сам корректно добавит CRLF, учитывая состояние файла
Add-Content -Path $cfgPath -Value $newLine -Encoding Unicode
}
} else {
# Если файла не существовало, создаем родительскую директорию и записываем файл с правильным BOM
$null = New-Item -Path (Split-Path $cfgPath) -ItemType Directory -Force
Set-Content -Path $cfgPath -Value $newLine -Encoding Unicode
}
Вы можете вызвать этот скрипт PowerShell прямо из классического BAT-файла одной строкой:
powershell -NoProfile -ExecutionPolicy Bypass -Command "$cfg='''%Appdata%\1C\1CEStart\1CEStart.cfg'''; $val='''CommonInfoBases=\\server\share\ibases.v8i'''; if(Test-Path $cfg){$c=Get-Content $cfg -Encoding Unicode; if($c -notcontains $val){Add-Content $cfg -Value $val -Encoding Unicode}}else{$null=New-Item (Split-Path $cfg) -Type Directory -Force; Set-Content $cfg -Value $val -Encoding Unicode}"
Преимущества этого метода: гарантированное сохранение правильной кодировки UTF-16 LE с BOM-маркером, защита от дублирования строк при повторном запуске скрипта (например, при каждом входе пользователя в систему), аккуратная обработка символов перевода строк.
Правка конфигурационных файлов в профиле каждого конкретного пользователя (%APPDATA%) — ресурсоемкий процесс, который часто дает сбои в доменных сетях или на терминальных серверах (например, при сбросе профилей пользователей или появлении новых сотрудников). Разработчики платформы «1С:Предприятие» предусмотрели штатные механизмы, позволяющие полностью избежать ручной или скриптовой правки пользовательских файлов 1CEStart.cfg.
Проанализируем эти возможности:
Платформа «1С» при запуске сначала считывает настройки из общего (глобального) конфигурационного файла, который находится по пути: %ProgramData%\1C\1CEStart\1CEStart.cfg (для устаревших операционных систем: C:\Documents and Settings\All Users\Application Data\1C\1CEStart\1CEStart.cfg).
После чтения глобального файла платформа считывает локальный файл пользователя и объединяет эти настройки. Если вы один раз пропишете пути к общим спискам баз в глобальном файле %ProgramData%\1C\1CEStart\1CEStart.cfg, эти настройки автоматически применятся ко всем пользователям данного компьютера или терминального сервера. Вам больше не придется писать скрипты под учетными записями пользователей.
Вы можете прописать в глобальном файле 1CEStart.cfg всего одну строку, указывающую на общий сетевой файл конфигурации:
CommonCfgLocation=\\server\1c_distrib\1cescmn.cfg
Этот параметр перенаправляет платформу к единому конфигурационному файлу на вашем файловом сервере. Любые изменения (добавление новых списков баз .v8i, указание сетевых каталогов для автоматического обновления версий платформы и списков разрешенных к установке компонентов) вы будете делать централизованно в одном файле 1cescmn.cfg на сервере. Изменения мгновенно вступят в силу у всех пользователей сети.
Начиная с версии платформы 8.3.14, у администраторов появилась возможность публиковать списки информационных баз через веб-серверы. В конфигурационном файле 1CEStart.cfg достаточно указать параметр:
WebCommonInfoBases=https://webserver.domain.local/1c_bases_list
В этом случае платформа при запуске будет динамически скачивать актуальный список баз по протоколу HTTPS, что полностью решает проблемы с сетевыми правами доступа к файловым шарам.
Используя предложенные методы работы с кодировками или переходя на централизованные механизмы управления платформой «1С», вы сможете раз и навсегда решить проблемы со сбоями запуска программы у конечных пользователей из-за повреждения файлов настроек.