Установка и удаление платформы 1С на клиентских компьютерах удалённо через скрипт (с доменом и без)
Для работы скрипта должен быть установлен PowerShell. Данная программа идёт в комплекте со всеми современными windows системами, а вот в WindowsXP придётся установить PowerShell отдельно.
Все параметры работы скрипта можно задать, отредактировав файл, а можно передать как значения соответствующих ключей. Давайте рассмотрим, какие имеются ключи и какие значения им необходимо передавать.
Ключ "dd" (от Distribution Directory), принимает любой путь windows формата, т.е. пути вида «C:\Windows» или «\\Server\1CDistr». По указанному пути должны располагаться дистрибутивы платформы 1С, причём каждый из дистрибутивов должен быть в своей папке с номером версии или с номером версии и битность платформы 1С Предприятия, например «8.3.5.1111» или «8.3.9.1818-32» или «8.3.9.1818-64». Суфиксы битности необходимо использовать, если в одной сети существуют компьютеры с операционными системами разной битности и вы хотите поставить на 64-битную систему 64-битную платформу. Указанная папка, и все подпапки с дистрибутивами платформ, должна быть доступна для чтения пользователю, от имени которого будет работать скрипт.
Ключ "dl" (от Directory Logs), аналогично ключу "dd", принимает любой путь windows формата. В данную папку будут записываться логи выполнения скрипта. Имена файлов с логами соответствуют имени компьютера и дописываются при каждом запуске скрипта. Указанная папка должна быть доступна для записи пользователю, от имени которого будет работать скрипт. Если указанный путь недоступен или нет возможности записи, то все действия скрипта будут писаться в файл «1C8InstallAndUninstall.log», находящийся в локальной папку пользователя (примерный путь «C:\Users\Vasa\AppData\Local\»).
Ключ "ip" (от Install Parameters) отвечает за параметры установки при работе скрипта. Ключ может принимать одно из следующих значений:
- “no” — не производить установку
- “last” — установить последнею платформу из найденных в папке с дистрибутивами
- “8.3.5.1111” — номер версии конкретной платформы, которую необходимо установит
Ключ "dp" (от Delet Parameters) отвечает за параметры удаления при работе скрипта. Ключ может принимать одно из следующих значений:
- “no” — не производить удаление
- “ael” (от all except last) — удалить все найденные на компьютере платформы, которые совпадают со всеми платформами, найденными в папке с дистрибутивами, кроме последней платформы. Важно! Данный ключ удалит только те платформы, версии которых имеются в папке с дистрибутивами платформ, если какая-то версия установлена на компьютер, но её нет в папке с дистрибутивами, то она не будет удалена.
- “8.3.5.1111” — номер версии конкретной платформы, которую необходимо удалить
- “all” — удалить все версии платформы 1С на компьютере. Данное значение является подавляющим и экстенсивным. Подавляющим, потому что, для работы скрипта при данном значении необходимо передать путь для записи логов, а можно не передавать даже его, все значения остальных ключей будут игнорироваться. Экстенсивными, потому что, удалены будут все продукты на компьютере хотя бы призрачно напоминающие платформу 1С.
Ключ "iod" (от Installation Options Distribution) отвечает за компоненты платформы 1С, которые будут установлены. Ключу необходимо передать значение вида «DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1», в котором можно менять 1 на 0 или обратно в зависимости какие части платформы вы хотите установить. Если данному ключу передать любое другое значение, не похожее на строку выше, то будет произведена установка всех компонент для работы системы в клиентском режиме.
- “DESIGNERALLCLIENTS” — основной клиент и конфигуратор
- “THINCLIENT” — тонкий клиент для клиент-серверного варианта работы
- “THINCLIENTFILE” — тонкий клиент с возможностью работы с файловыми информационными базами
Плохая новость: придётся побегать, и настроить на каждом компьютере выполнение планировщика заданий
Хорошая новость: это надо сделать только один раз.
Для начала осуществим подготовку:
- Создаём 2 общедоступных папки, одну с правами на чтение для всех, а другую с правами на запись для всех. Обязательно создавайте 2 независимые папке, иначе всё может очень плохо закончиться.
- В папку с правами «только на чтение для всех» кладём папки с дистрибутивами, каждая из папок должна именоваться по номеру версии дистрибутива, который в ней находиться. Сюда же кладём скрипт и bat файл, который запускает скрипт.
Небольшое отступление! Зачем нам нужен bat файл для запуска PowerShell скрипта? Потому что используя bat файл мы убиваем двух зайцев:
- По умолчанию система windows запрещает запуск любого PowerShell скрипта из соображения безопасности, поэтому bat файл будет сначала разрешать запуск скрипта, а после его работы снова запрещать.
- В bat файле можно менять параметры запуска скрипта, не редактируя сам файл скрипта меняя установленные в него значения по умолчанию.
Теперь начнём настраивать локальные компьютеры пользователей. В отсутствии домена предполагается, что все пользователи работают под локальными учётными записями с правами «Пользователи», а для административных действия имеется учётная записи с правами «Администраторы».
- Входим в систему на локальном компьютере под именем пользователя с правами «Администраторы»
- Жмём Win+R и вводим Taskschd.msc, открывается планировщик заданий
- Создаём задание по ссылке справа (обратите внимание на ссылки «Подключиться к другому компьютеру» и «Импортировать задачу» для самых больших ленивцев).
- Даём осмысленное название заданию. Необходимо обязательно установить: «Выполнять для всех пользователей» и «Выполнять с наивысшими правами»
Всё проще некуда
- Создаём группу, в которую включаем все интересующие нас компьютеры. Очень важно чтобы в группу входили именно компьютеры, а не пользователи которые за ними сидят, т.к. для работы скрипту необходимы повышение права, которых нет у пользователя.
- Создаём 2 папки, к одной даём доступ на чтение ранее созданной группе, а второй на запись. В первую кладём дистрибутивы 1С (смотри выше), а во вторую будут писаться логи работы скрипта.
- Открываем оснастку «Управление групповой политикой»
- Создаём или изменяем существующую политику, направленную на ранее созданную группу компьютеров.
- Идём «Конфигурация компьютера» - «Политики» - «Конфигурация Windows» - «Сценарии (запуск/завершение)» – «Автозагрузка».
- Работоспособность скрипта проверена в следующих системах: Windows 7 (x86, x64), Windows 8.1 (x86, x64), Windows 10 (x86, x64) со всеми обязательными и не обязательными обновлениями на 2016-11-10.
- Если вас не устраивает задержка при срабатывание скрипта в домене, то необходимо установить параметр «blackhole321 за данную информацию.
- Полностью переписан способ обхода каталогов с платформой. К данной части кода было больше всего нареканий, не у всех данная часть отрабатывала, а у некоторых отрабатывала неправильно. Теперь всё работает корректно, т.к. используются только самые простые конструкции для обхода директории с дистрибутивами.
- Полностью переписана часть поиска последнего (старшего) дистрибутива в папки с дистрибутивами. Теперь это нормальный понятный код, а не ужас, который был ранее.
- Поменялись между собой части кода, теперь скрипт пытается в первую очередь поставить платформу, а потом всё остальное.
- Дописано много различных проверок чтобы избежать странного поведения или лишних попыток установить платформу. В лог файле теперь больше информации о работе скрипта.
- Изменена логика работы скрипта. Теперь проверяется установка платформы и в случае отсутствия устанавливаемой платформы на клиентском компьютере скрипт прекращает работу.
- Добавлена функциональность позволяющая в сети с компьютерами разной битности устанавливать 64-битную платформу на 64-битные системы. Для работы данного функционала папки с платформами должны быть вида "Х.Х.Х.Х-32" и "Х.Х.Х.Х-64".
- В связи с выходом платформы 8.3.16.*, в которой добавился msi файл для Windows XP, изменён поиск файла msi. Это не говорит о том что в Windows XP данный скрипт будет работать, скорее наоборот, теперь он точно не будет работать в этой операционной системе.
- Теперь перед установкой платформы устанавливается Microsoft Visual C++ Redistributable, если соответствующий файл имеется в папке с устанавливаемой платформой.
- Исправлены некоторые ошибки.
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
(4) Судя по всему у вас нет папок с дистрибутивами в директории где они должны быть.
Как я понимаю командлет Get-ChildItem согласно параметру -Directory пытается найти хоть какие-то папки по пути $DistribDir (это параметр -dd из описания скрипта), но там ничего нет или имеются только файлы. Вот на отсутствие папок в директории -dd скрипт и ругается.
Вторая ошибка должна уйти когда исправите первую.
Читайте внимательно описание параметров скрипта и что где должно находиться.
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
в логе пишет --------------------------------------------------------------------------------- 2014.10.27 15:40:51 Начало работы скрипта 2014.10.27 15:40:53 Последняя (старшая) платформа уже установлена. 2014.10.27 15:40:53 Окончание работы скрипта --------------------------------------------------------------------------------- 2014.10.27 15:40:53 Последняя (старшая) платформа уже установлена. 2014.10.27 15:40:53 Окончание работы скрипта --------------------------------------------------------------------------------- но 1С не установлена. Подскажите, что еще посмотреть для решения этой задачи? посмотрел в отладчике PowerGUI 259 строчка не обрабатывается и $AllPlatforms не присваивается массива из имен папок. но если запустить из powerShell то выдает: Get-ChildItem -Path \\SRV2012\1CDistr
Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 27.10.2014 9:10 8.3.5.1231 -a--- 27.10.2014 14:07 531 1C8InstallAndUninstall.bat -a--- 27.10.2014 16:18 19223 1C8InstallAndUninstall.ps1
- Скопировать ссылку
- Перейти
(9) Если скрипт отработал с непредвиденной ошибкой, то смотреть на логи не имеет смысла, вероятнее всего там тоже имеется ошибка
(10) с этой директивой -Directory вообще не понятно. Она имеется у меня в справке WPS ISE на одной системе и отсутствует в другой, хотя там и там установлен Win 8.1 Pro, по онлайн ссылке http://go.microsoft.com/fwlink/p/?linkid=290488 данная директива отсутствует.
Подытожим, я переписал данную строку.
Я уверен что это не последняя ошибка и недочёт скрипта, поэтому создал репозиторий GitHab.
- Скопировать ссылку
- Перейти
Командлет Get-ChildItem c параметром -Directory удалось найти в третьей версии PowerShell. (посмотреть версию - $PSVersionTable). Скорее всего на более низких версиях данный скрипт не работает и на XP он не запустится. SYNTAX Get-ChildItem [-Path <string[]>] [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Force] [-Name] [-UseTransaction] [-Attributes <FlagsExpression[FileAttributes]>] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>] Get-ChildItem [-Filter <string>] -LiteralPath <string[]> [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Force] [-Name] [-UseTransaction] [-Attributes <FlagsExpression[FileAttributes]>] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
При установке PowerShell 3.0 все тут-же запустилось и установилось! Автору огромное спасибо за его разработку!
- Скопировать ссылку
- Перейти
С новой версией скрипта работает и на второй версии PowerShell. Есть пожелание расширить данные ключа "iod" для установки компонентов: DESIGNERALLCLIENTS – все клиенты и конфигуратор. THINCLIENT – тонкий клиент для клиент-серверного варианта работы. THINCLIENTFILE – тонкий клиент с возможностью работы с файловыми информационными базами. SERVER – сервер «1С:Предприятия». Если программа установки запускается из программы запуска, то сервер будет установлен как приложение. WEBSERVEREXT – компоненты расширения для веб-сервера. CONFREPOSSERVER – сервер хранилища конфигураций «1С:Предприятия». SERVERCLIENT – компоненты для администрирования кластера серверов «1С:Предприятия». CONVERTER77 – конвертер информационных баз из версии «1С:Предприятия 7.7». LANGUAGES – список языков интерфейса для установки
Как бы также красиво раздать пользователям список баз данных в домене?
- Скопировать ссылку
- Перейти
(12) с технической стороны нет ни какой проблемы в расширении, но вот с логической это не имеет ни какого смысла. Зачем на локальных компьютерах ставить серверные компоненты? Вот язык можно менять, но это только для локальных задач, я не знаю не одного человека который бы с такими задачами сталкивался.
Список баз пользователя находиться в файле ibases.v8i в каталоге C:\Users\Vasa\AppData\Roaming\1C\1CEStart
По поводу общих баз: 1. Берём файл 1cestart.exe из каталога C:\Program Files (x86)\1cv8\common 2. Кладём его в сетевой каталог, а рядом кладём 2 файла 1cescmn.cfg и bases.v8i 3. 1cescmn.cfg содержит в строки
4. bases.v8i содержит название и все параметры базы 5. всем пользователям ставим вместо ярлыка 1С на рабочий стол ярлык к файлу 1cestart.exe в общей папке
в интернете много об этом описано, вот одна из статей http://habrahabr.ru/post/179405/
- Скопировать ссылку
- Перейти
Мда, печаль. а начали не так уж и плохо.
П.С.: На 8.3 общие базы можно раздать еще красивше - веб-сервисом.
- Скопировать ссылку
- Перейти
Что бы исключить ошибку с ключем -Directory переписал фрагмент вот так:
$AllPlatforms = (Get-ChildItem -Path $DistribDir | Where-Object ) $Arr = $AllPlatforms.Clone() For ($i = 0; $i -lt $Arr.Length; $i++) < $Arr[$i] = ($Arr[$i]).Name + '.' + ($Arr[$i]).Name > Все работает.
У меня загвоздка в другом: хочу устанавливать именно сервер, а не клиента. С 32 проблем нет, а вот 64 - никак не идет. Что нам надо в iod подставлять? Смотрел через Орку, никаких ключей на эту тему там вроде нет. Совсем без ключей не устанавливает ничего, хотя что то долго делает.
- Скопировать ссылку
- Перейти
Я ни когда не задавался идеей массовой установки серверной части, поэтому данной возможности в скрипте не предусмотрено. Пожалуйста расскажите вашу причину в необходимости массовой установки серверной части, возможно я чего-то не знаю.
P.S.: (12) в данному сообщении описаны все возможные ключи установки, они задаются аналогично ключу "iod", кроме языка, он указывается согласно короткой нотации (en, ru и т.д.). Все эти команды описаны в документации по 1С Предприятию 8.3, Руководство администратора, Приложение 3. Описание и расположение служебных файлов, файл 1cestart.cfg.
Если вы хотите чтобы все эти параметры работали в скрипте, то необходимо убрать проверку ключа "iod" в функции InstallPlatform
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
+ CategoryInfo : ObjectNotFound: (1Cinst.ps1:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException --- ось 8.1, админ домена
- Скопировать ссылку
- Перейти
(19) 1Cinst.ps1 . Не вижу такого файла на ГитХабе.
Видимо вы правили скрипты под себя и выставили некорректные параметры или изменили ту часть скриптов в которую не стоит лезть без чёткого понимания происходящего.
- Скопировать ссылку
- Перейти
(20) я изменил название файла? не люблю длинные бессмысленные названия, когда можно назвать коротко. Могу переименовать назад, результат не изменится. Содержимое правил только в контексте переменных: param([string]$dd = "\\set-1c\platforms", [string]$dl = "\\set-1c\platfoms\Logs", [string]$ip = "last", [string]$dp = "ael", [string]$iod = "DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1") cmd тоже изменил под свои переменные и под название скрипта: @powershell "\\set-1c\platforms\1Cinst.ps1" -dd '\\set-1c\platforms' -dl '\\set-1c\platforms\Logs' -dp 'ael' -ip 'last' -iod 'DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1'
прям сейчас запустил cmd не меняя содержимого и ничего не меняя в целом по отношению ко вчерашнему запуску, ошибка другая: \\set-1c\platforms\1Cinst.ps1 : Невозможно загрузить файл \\set-1c\platforms\1Cinst.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies п о адресу http://go.microsoft.com/fwlink/?LinkID=135170 . строка:1 знак:1 + \\set-1c\platforms\1Cinst.ps1 -dd '\\set-1c\platforms' -dl '\\set-1c\platforms\L . +
+ CategoryInfo : Ошибка безопасности: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
проверяем разрешение на запуск скриптов PS C:\Users\xxx> get-executionpolicy Restricted что логично, на вин8.1 это по дефолту, но тогда получается не выполняется строка из cmd: @start /wait powershell "Set-ExecutionPolicy RemoteSigned -Force" давайте запустим ее руками: PS C:\Users\xxx> start /wait powershell "Set-ExecutionPolicy RemoteSigned -Force" Start-Process : Не удается найти позиционный параметр, принимающий аргумент "Set-ExecutionPolicy RemoteSigned -Force". строка:1 знак:1 + start /wait powershell "Set-ExecutionPolicy RemoteSigned -Force" +
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
выполним команду PS отдельно от start: PS C:\Users\xxx> Set-ExecutionPolicy RemoteSigned -Force Set-ExecutionPolicy : Отказано в доступе к разделу реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds \Microsoft.PowerShell". Чтобы изменить политику выполнения для области (LocalMachine), используемой по умолчанию, запустите Windows PowerShell с параметром "Запуск от имени администратора". Чтобы изменить политику выполнения для текущего пользователя, выполните "Set-ExecutionPolicy -Scope CurrentUser". строка:1 знак:1 + Set-ExecutionPolicy RemoteSigned -Force +
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyComma nd
давайте исправим так, чтобы он делал для текущего пользователя : PS C:\Users\xxx> Set-ExecutionPolicy RemoteSigned -Force -Scope CurrentUser