Нечасто, но все-таки случаются в серых буднях обычного системного администратора или администратора сервера 1С яркие деньки, непохожие на все прочие. Внезапно или запланированно компания покупает новый сервер для нужд 1С (да-да, и на улице 1С-ников случаются праздники). Вот теперь-то можно уже развернуться на новом железе – и платформу обновить, и SQL-сервер, и… и много еще чего! Да и обычным пользователям тоже станет комфортнее! Да, кстати, о них, об этих пользователях, на рабочих станциях ведь у нас настроено подключение на старый теперь уже сервер, да и версия платформы очень может быть тоже прежняя. А нам мечталось, что все теперь будет по-новому! Ладно, если пользователей у нас с десяток, а если их пара сотен или того больше?! Вот примерно так заканчиваются тихие будни и спокойная жизнь системных администраторов. Моя цель – помочь моим коллегам побыстрее снова вернуться в свою размеренно-привычную колею. Самое главное для любого специалиста ИТ - помнить твердое правило: любые рутинные операции могут и должны быть автоматизированы.
Для начала разместим установочные файлы конфигурации в папку с общим доступом для любого пользователя нашей локальной сети. А для установки нужной платформы (в моем случае версии 24.1548) напишем простенький bat-файл, например, такой:
@echo off
chcp 65001
echo Внимание! устанавливается новая версия платформы 1С. Дождитесь окончания установки
msiexec /i "\\Путь к расшаренному каталогу с файлами установки 1С\8.3.24.1548_tc64\1CEnterprise 8 Thin client (x86-64).msi" /qn TRANSFORMS=adminstallrelogon.mst;1049.mst LANGUAGES=RU
echo Установлена версия платформы 1С 8.3.24.1548
Часть дела сделана! Вуаля! Остается нюанс, про который мы часто забываем – подкорректировать файл ibases.v8i, если мы перенесли кластер сервера на новый. Изменять файл вручную, как и изменять настройки кластера в окне подключения к базе 1С через кнопку «изменить» - не наш метод. Нам лень. Проще написать, к примеру, vbs-скрипт, который потом будет это делать за нас для каждой рабочей станции в нашей локальной сети.
Вместо одного сервера (сервер1) записывается другой (сервер2) по определенному условию для одной конкретной базы «БАЗА1С»:
Const ForReading = 1
Const ForWriting = 2
Const TristateUseDefault = -2
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("Wscript.Shell")
'Проверяем, что платформа 1С уже установлена
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (objFSO.FolderExists("C:\Program Files\1cv8") Or objFSO.FolderExists("C:\Program Files (x86)\1cv8")) Then
APPDATA = WshShell.ExpandEnvironmentStrings("%APPDATA%")
v8i = APPDATA + "\1C\1CEStart\ibases.v8i"
If fso.FileExists(v8i) Then
str2 = ""
Set objFile = fso.OpenTextFile(v8i, ForReading, False, TristateUseDefaul)
Do While Not objFile.AtEndOfStream
str = objFile.ReadLine
i = InStr(str,"БАЗА1С")
If i >0 Then
str = Replace (str, "сервер1", "сервер2")
End If
str2 = str2 + str & vbCrLf
Loop
objFile.Close
End If
fso.DeleteFile(v8i)
Set objFile = fso.OpenTextFile(v8i, ForWriting, True, TristateUseDefaul)
objFile.Write str2
objFile.Close
WScript.quit
End If
Всё получилось? Иногда на этом пути нас поджидают неожиданные препятствия, о которых мы и позабыли, или не знали. К примеру, уже написанный нами batник нужно запускать на рабочей станции под учетной записью администратора, а текущий пользователь такими правами и не обладает. Конец нашей автоматизации!? А ничего подобного. Можно исхитриться и написать скрипт vbs, который запустить нужный нам файл с правами администратора.
Проверим установлена ли на рабочей станции нужная платформа, если нет – запустим с правами администратора bat-файл из расшареной папки на сервере:
If NOT (objFSO.FolderExists("C:\Program Files\1cv8\8.3.24.1548") Or objFSO.FolderExists("C:\Program Files (x86)\1cv8\8.3.24.1548")) Then
shell.ShellExecute "cmd.exe", "/c ""\\Путь до расшаренной папки на сервере\имя файла.bat""", "", "runas", 1
End If
Ну и напоследок завершающий штрих – ярлык платформы на рабочем столе. Да его мы тоже создадим программно. В простейшем случае вот таким vbs-скриптом:
If Not objFSO.FileExists(strDesktop & "\1С 8.3.24.lnk") Then
shortcutPath = WshShell.SpecialFolders("Desktop") & "\1С 8.3.24.lnk"
Set shortcut = WshShell.CreateShortcut(shortcutPath)
If objFSO.FolderExists("C:\Program Files\1cv8\8.3.24.1548") Then
shortcut.TargetPath = "C:\Program Files\1cv8\8.3.24.1548\bin\1cv8c.exe"
shortcut.WorkingDirectory = "C:\Program Files\1cv8\common\"
shortcut.Description = "1C Предприятие 8.3.24"
shortcut.Save
End If
If objFSO.FolderExists("C:\Program Files (x86)\1cv8\8.3.24.1548") Then
shortcut.TargetPath = "C:\Program Files (x86)\1cv8\8.3.24.1548\bin\1cv8c.exe"
shortcut.WorkingDirectory = "C:\Program Files (x86)\1cv8\common\"
shortcut.Description = "1C Предприятие 8.3.24"
shortcut.Save
End If
End If
Конечно, мои решения не всем могут понравиться, но я уверен, что кому-то наверняка очень сильно помогут упростить и без того нелегкую жизнь простого IT-администратора.
Вступайте в нашу телеграмм-группу Инфостарт