Установка и удаление платформы 1С на клиентских компьютерах удалённо через скрипт (с доменом и без)







Существует множество способов установки и обновления платформы 1С на клиентских компьютерах. Данная статья описывает один из самых гибких методов с использованием скрипта.

Работа со скриптом

Для работы скрипта должен быть установлен PowerShell. Данная программа идёт в комплекте со всеми современными windows системами, а вот в WindowsXP придётся установить PowerShell отдельно.

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

Ключ "dd" (от Distribution Directory), принимает любой путь windows формата, т.е. пути вида «C:Windows» или «\Server1CDistr». По указанному пути должны располагаться дистрибутивы платформы 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:UsersVasaAppDataLocal»).

Ключ "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” — тонкий клиент с возможностью работы с файловыми информационными базами

Как установить, обновить или удалить Платформу 1С, если у вас много компьютеров, бегать к каждому лень, а домена нет?

Плохая новость: придётся  побегать, и настроить на каждом компьютере выполнение планировщика заданий

Хорошая новость: это надо сделать только один раз.

Для начала осуществим подготовку:

  1. Создаём 2 общедоступных папки, одну с правами на чтение для всех, а другую с правами на запись для всех. Обязательно создавайте 2 независимые папке, иначе всё может очень плохо закончиться.
  2. В папку с правами «только на чтение для всех» кладём папки с дистрибутивами, каждая из папок должна именоваться по номеру версии дистрибутива, который в ней находиться. Сюда же кладём скрипт и bat файл, который запускает скрипт.

Небольшое отступление! Зачем нам нужен bat файл для запуска PowerShell скрипта? Потому что используя bat файл мы убиваем двух зайцев:

  • По умолчанию система windows запрещает запуск любого PowerShell скрипта из соображения безопасности, поэтому bat файл будет сначала разрешать запуск скрипта, а после его работы снова запрещать.
  • В bat файле можно менять параметры запуска скрипта, не редактируя сам файл скрипта меняя установленные в него значения по умолчанию.

Теперь начнём настраивать локальные компьютеры пользователей. В отсутствии домена предполагается, что все пользователи работают под локальными учётными записями с правами «Пользователи», а для административных действия имеется учётная записи с правами «Администраторы».

  1. Входим в систему на локальном компьютере под именем пользователя с правами «Администраторы»
  2. Жмём Win+R и вводим Taskschd.msc, открывается планировщик заданий
  3. Создаём задание по ссылке справа (обратите внимание на ссылки «Подключиться к другому компьютеру» и «Импортировать задачу» для самых больших ленивцев).
  4. Даём осмысленное название заданию. Необходимо обязательно установить: «Выполнять для всех пользователей» и «Выполнять с наивысшими правами»

  5. Переходим на вкладку «Триггеры» и нажимаем «Создать». Тут настраиваются параметры, при каких условиях будет запускаться скрипт. Можно настроить, чтобы скрипт запускался каждый час в рабочее время (если скрипту нечего делать, т.е. уже всё установлено и удалено, то его работа ни как не скажется на производительности). Другой популярный вариант запуска при включении компьютера, обращаю ваше внимание что имеются в понятие «При входе в систему» и «При запуске», в первом случае скрипт может не отработать, т.к. пользователь от имени которого запускается скрипт отличен от пользователя работающего на данном компьютере, проще говоря выбирайте вариант «При запуске»

  6. Переходим на вкладку «Действия» и нажимает «Создать». Нажимаем «Обзор» и выбираем bat файл. Дальнейшие вкладки можно оставить по умолчанию.

Как установить, обновить или удалить Платформу 1С, если имеется домен?

Всё проще некуда

    1. Создаём группу, в которую включаем все интересующие нас компьютеры. Очень важно чтобы в группу входили именно компьютеры, а не пользователи которые за ними сидят, т.к. для работы скрипту необходимы повышение права, которых нет у пользователя.
    2. Создаём 2 папки, к одной даём доступ на чтение ранее созданной группе, а второй на запись. В первую кладём дистрибутивы 1С (смотри выше), а во вторую будут писаться логи работы скрипта.
    3. Открываем оснастку «Управление групповой политикой»
    4. Создаём или изменяем существующую политику, направленную на ранее созданную группу компьютеров.
    5. Идём «Конфигурация компьютера» — «Политики» — «Конфигурация Windows» — «Сценарии (запуск/завершение)» – «Автозагрузка».

    6. Добавляем новый сценарий. Обратите внимание, что путь до сценария должен быть сетевым, а не локальным. Можно добавить сценарий как bat файл, так и напрямую PowerShell. Всё зависит от вашего парка компьютеров и желания.

    7. Всё.

Примечание

  • Работоспособность скрипта проверена в следующих системах: Windows 7 (x86, x64), Windows 8.1 (x86, x64), Windows 10 (x86, x64) со всеми обязательными и не обязательными обновлениями на 2024-11-10.
  • Если вас не устраивает задержка при срабатывание скрипта в домене, то необходимо установить параметр «Configure Logon Script Delay» в «0». Параметр можно найти: Computer Configuration > Administrative Templates > System > Group Policy > Configure Logon Script Delay (Конфигурация компьютера > Политики > Административные шаблоны > Система > Групповая политика > Настроить задержку сценария входа). Большое спасибо blackhole321 за данную информацию.

upd:2024-12-07

  1. Полностью переписан способ обхода каталогов с платформой. К данной части кода было больше всего нареканий, не у всех данная часть отрабатывала, а у некоторых отрабатывала неправильно. Теперь всё работает корректно, т.к. используются только самые простые конструкции для обхода директории с дистрибутивами.
  2. Полностью переписана часть поиска последнего (старшего) дистрибутива в папки с дистрибутивами. Теперь это нормальный понятный код, а не ужас, который был ранее.
  3. Поменялись между собой части кода, теперь скрипт пытается в первую очередь поставить платформу, а потом всё остальное.
  4. Дописано много различных проверок чтобы избежать странного поведения или лишних попыток установить платформу. В лог файле теперь больше информации о работе скрипта.

upd:2024-11-21

  1. Изменена логика работы скрипта. Теперь проверяется установка платформы и в случае отсутствия устанавливаемой платформы на клиентском компьютере скрипт прекращает работу.
  2. Добавлена функциональность позволяющая в сети с компьютерами разной битности устанавливать 64-битную платформу на 64-битные системы. Для работы данного функционала папки с платформами должны быть вида "Х.Х.Х.Х-32" и "Х.Х.Х.Х-64".

upd:2024-12-12

  1. В связи с выходом платформы 8.3.16.*, в которой добавился msi файл для Windows XP, изменён поиск файла msi. Это не говорит о том что в Windows XP данный скрипт будет работать, скорее наоборот, теперь он точно не будет работать в этой операционной системе.
  2. Теперь перед установкой платформы устанавливается Microsoft Visual C++ Redistributable, если соответствующий файл имеется в папке с устанавливаемой платформой.

99 Comments

  1. EugeneBespalov

    Я понимаю что можно и bat, но всё же логичнее было бы говорить и использовать cmd, всё равно ваш скрипт в DOS не будет работать.

    Reply
  2. LobodaYu

    при выполнении скрипта выдает ошибку:

    Неверная числовая константа: 1.

    строка:1 знак:2

    + 1 <<<< C8InstallAndUninstall.ps1

    + CategoryInfo : ParserError: (1:StecordException

    + FullyQualifiedErrorId : BadNumericConstant

    Reply
  3. LobodaYu

    Помогите разобраться

    Reply
  4. LobodaYu

    ———————————————————————————

    POWERSHELL EXCEPTION

    EXCEPTION TYPE:System.Management.Automation.ParameterBindingException

    MESSAGE:Не удается найти параметр, соответствующий имени

    Reply
  5. Dragonim

    (4) Судя по всему у вас нет папок с дистрибутивами в директории где они должны быть.

    Как я понимаю командлет Get-ChildItem согласно параметру -Directory пытается найти хоть какие-то папки по пути $DistribDir (это параметр -dd из описания скрипта), но там ничего нет или имеются только файлы. Вот на отсутствие папок в директории -dd скрипт и ругается.

    Вторая ошибка должна уйти когда исправите первую.

    Читайте внимательно описание параметров скрипта и что где должно находиться.

    Reply
  6. LobodaYu

    Все папки вроде на месте (прикладываю скан)

    Reply
  7. LobodaYu

    В скрипте заменил пути (\server) на свои (\srv2012) и сохранил с кодировкой 1251 ANSI

    Reply
  8. LobodaYu

    В скрипте заменил пути (\server) на свои (\srv2012) и сохранил с кодировкой 1251 ANSI

    И в описаниях командлета Get-ChildItem не нашел параметра -Directory (Get-ChildItem [-Path <string[]>] [-Filter <string>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction] [<CommonParameters>]

    Get-ChildItem -LiteralPath <string[]> [-Filter <string>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction] [<CommonParameters>])

    Reply
  9. LobodaYu

    в логе пишет

    ———————————————————————————

    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 \SRV20121CDistr

    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

    Reply
  10. LobodaYu

    Командлет 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 все тут-же запустилось и установилось! Автору огромное спасибо за его разработку!

    Reply
  11. Dragonim

    (9) Если скрипт отработал с непредвиденной ошибкой, то смотреть на логи не имеет смысла, вероятнее всего там тоже имеется ошибка

    (10) с этой директивой -Directory вообще не понятно. Она имеется у меня в справке WPS ISE на одной системе и отсутствует в другой, хотя там и там установлен Win 8.1 Pro, по онлайн ссылке http://go.microsoft.com/fwlink/p/?linkid=290488 данная директива отсутствует.

    Подытожим, я переписал данную строку.

    Я уверен что это не последняя ошибка и недочёт скрипта, поэтому создал репозиторий GitHab.

    https://github.com/Dragonim/1C8InstallAndUninstall.git

    Reply
  12. LobodaYu

    С новой версией скрипта работает и на второй версии PowerShell.

    Есть пожелание расширить данные ключа «iod» для установки компонентов:

    DESIGNERALLCLIENTS – все клиенты и конфигуратор.

    THINCLIENT – тонкий клиент для клиент-серверного варианта работы.

    THINCLIENTFILE – тонкий клиент с возможностью работы с файловыми информационными базами.

    SERVER – сервер «1С:Предприятия». Если программа установки запускается из программы запуска, то сервер будет установлен как приложение.

    WEBSERVEREXT – компоненты расширения для веб-сервера.

    CONFREPOSSERVER – сервер хранилища конфигураций «1С:Предприятия».

    SERVERCLIENT – компоненты для администрирования кластера серверов «1С:Предприятия».

    CONVERTER77 – конвертер информационных баз из версии «1С:Предприятия 7.7».

    LANGUAGES – список языков интерфейса для установки

    Как бы также красиво раздать пользователям список баз данных в домене?

    Reply
  13. Dragonim

    (12) с технической стороны нет ни какой проблемы в расширении, но вот с логической это не имеет ни какого смысла. Зачем на локальных компьютерах ставить серверные компоненты? Вот язык можно менять, но это только для локальных задач, я не знаю не одного человека который бы с такими задачами сталкивался.

    Список баз пользователя находиться в файле ibases.v8i в каталоге C:UsersVasaAppDataRoaming1C1CEStart

    По поводу общих баз:

    1. Берём файл 1cestart.exe из каталога C:Program Files (x86)1cv8common

    2. Кладём его в сетевой каталог, а рядом кладём 2 файла 1cescmn.cfg и bases.v8i

    3. 1cescmn.cfg содержит в строки

    CommonCfgLocation=\server1c1cescmn.cfg
    CommonInfoBases=\server1Сases.v8i

    4. bases.v8i содержит название и все параметры базы

    5. всем пользователям ставим вместо ярлыка 1С на рабочий стол ярлык к файлу 1cestart.exe в общей папке

    в интернете много об этом описано, вот одна из статей http://habrahabr.ru/post/179405/

    Reply
  14. h00k

    (13) Dragonim

    5. всем пользователям ставим вместо ярлыка 1С на рабочий стол ярлык к файлу 1cestart.exe в общей папке

    Мда, печаль… а начали не так уж и плохо…

    (12) LobodaYu

    Как бы также красиво раздать пользователям список баз данных в домене?

    Пример заполнения общих баз из ibcommon.v8i расположенного в DistrFolder. Код достаточно простой, прикрутить можно к любому логон скрипту.

    ‘Добавление списка общих баз
    Sub SetCommonBase
    
    Dim WshShell, FSO, OsVer, File1CEStart, ReadStr(),obj1CEStart,i,k,strNextLine
    
    Set WshShell = CreateObject(«WScript.Shell»)
    Set FSO = WScript.CreateObject(«Scripting.FileSystemObject»)
    
    OsVer = WshShell.RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionCurrentVersion»)
    
    ‘Проверка ОС
    if OsVer = «5.0» or OsVer = «5.1» or OsVer = «5.2» then
    
    ‘Windows 2000 or XP or 2003
    File1CEStart = WshShell.ExpandEnvironmentStrings(«%ALLUSERSPROFILE%») & «Application Data1C1CEStart1CEStart.cfg»
    
    Else
    
    ‘Windows Vista or 7 or 2008
    File1CEStart = WshShell.ExpandEnvironmentStrings(«%ALLUSERSPROFILE%») & «1C1CEStart1CEStart.cfg»
    end if
    
    ‘File1CEStart – Файл 1CEStart.cfg содержит настройки, которые используют программы запуска 1CEStart.exe и 1Cv8s.exe, клиентские приложения 1Cv8.exe и 1Cv8c.exe
    
    ‘Проверяем наличие существует ли файл File1CEStart
    If (fso.FileExists(File1CEStart)) Then
    
    ‘Читаем из файла в массив
    Set obj1CEStart=fso.OpenTextFile(File1CEStart, 1,false,-1)
    
    i=0
    Do Until obj1CEStart.AtEndOfStream
    Redim Preserve ReadStr(i)
    strNextLine = obj1CEStart.Readline
    
    ‘Проверяем CommonInfoBases если есть то пропускаем
    If Instr(1,strNextLine,»CommonInfoBases=»)=0 then
    ReadStr(i) = strNextLine
    i=i+1
    End if
    Loop
    
    obj1CEStart.Close
    
    Redim Preserve ReadStr(i)
    ReadStr(i)=»CommonInfoBases=» & DistrFolder & «ibcommon.v8i»
    
    ‘Записываем из массива в файл
    Set obj1CEStart=fso.OpenTextFile(File1CEStart, 2,true,-1)
    
    For k=0 to i
    obj1CEStart.WriteLine ReadStr(k)
    Next
    obj1CEStart.Close
    End If
    
    End Sub
    

    Показать

    П.С.: На 8.3 общие базы можно раздать еще красивше — веб-сервисом.

    Reply
  15. loekyn

    Что бы исключить ошибку с ключем -Directory переписал фрагмент вот так:

    $AllPlatforms = (Get-ChildItem -Path $DistribDir | Where-Object {$_.Name -match $RegExpPatternNameFolderDistrib})

    $Arr = $AllPlatforms.Clone()

    For ($i = 0; $i -lt $Arr.Length; $i++) {

    $Arr[$i] = ($Arr[$i]).Name + ‘.’ + ($Arr[$i]).Name

    }

    Все работает.

    У меня загвоздка в другом: хочу устанавливать именно сервер, а не клиента. С 32 проблем нет, а вот 64 — никак не идет. Что нам надо в iod подставлять? Смотрел через Орку, никаких ключей на эту тему там вроде нет. Совсем без ключей не устанавливает ничего, хотя что то долго делает.

    Reply
  16. Dragonim

    (15) Данная проблема была исправлена, смотри новый скрипт на https://github.com/Dragonim/1C8InstallAndUninstall.git

    Я ни когда не задавался идеей массовой установки серверной части, поэтому данной возможности в скрипте не предусмотрено. Пожалуйста расскажите вашу причину в необходимости массовой установки серверной части, возможно я чего-то не знаю.

    P.S.: (12) в данному сообщении описаны все возможные ключи установки, они задаются аналогично ключу «iod», кроме языка, он указывается согласно короткой нотации (en, ru и т.д.). Все эти команды описаны в документации по 1С Предприятию 8.3, Руководство администратора, Приложение 3. Описание и расположение служебных файлов, файл 1cestart.cfg.

    Если вы хотите чтобы все эти параметры работали в скрипте, то необходимо убрать проверку ключа «iod» в функции InstallPlatform

    Reply
  17. loekyn

    Все что надо я в скрипте изменил. Возможность установки серверной части в скрипте есть — надо только ставить подходящие значения в iod.

    Необходимость установки серверной части вызвана желанием полностью автоматизировать процесс обновления релизов 1С от конфигураций до платформы. На текущий момент не хватает сущего пустяка: как установить сервер 64. Что там в iod надо подставить? Нигде не нашел для сервера 64.

    Reply
  18. EugeneBespalov

    (17) loekyn, какая жуть 🙂 ставить платформу скриптом, это же бесконтрольно. обновление платформы все равно делает ответственный человек.

    Reply
  19. EugeneBespalov

    скрипт взял с гитхаба, что через cmd что напрямую пишет одно и то же:

    1Cinst.ps1 : Имя «1Cinst.ps1» не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите

    попытку.

    строка:1 знак:1

    + 1Cinst.ps1 -dd ‘\set-1cplatforms’ -dl ‘\set-1cplatformsLogs’ -dp ‘ael’ -ip …

    + ~~~~~~~~~~

    + CategoryInfo : ObjectNotFound: (1Cinst.ps1:String) [], CommandNotFoundException

    + FullyQualifiedErrorId : CommandNotFoundException



    ось 8.1, админ домена

    Reply
  20. Dragonim

    (19)

    1Cinst.ps1 ??? Не вижу такого файла на ГитХабе.

    Видимо вы правили скрипты под себя и выставили некорректные параметры или изменили ту часть скриптов в которую не стоит лезть без чёткого понимания происходящего.

    Reply
  21. EugeneBespalov
    Reply
  22. Dragonim

    (21)

    Вы не написали результат выполнения последней команды.

    Вы изменили политику безопасности запуска скрипта для данного пользователя, это не позволит скрипту выполнить установку 1С.

    попробуйте выполнить команду cd \set-1cplatforms в PowerShell от текущего пользователя.

    Есть подозрения, что у вас проблема с правами доступа. Для сетевых папок должно быть соблюдено 2 разрешения, первое это настройки прав доступа на уровне доступа к папке по сети, второе это настройки прав доступа на уровне файловой системы. Проверти права доступа к папке во вкладке Доступ и Безопасность соответственно. Если они выставлены правильно, то перезапишите все права доступа на уровне файловой системы для всех вложенных объектов.

    Reply
  23. EugeneBespalov

    (22) нет результата выполнения последней команды, файл ps1 просто открылся в Блокноте.

    Политику я не менял, я просто в ручном режиме выполнил команды из вашего же CMD, но так как изменение политики не работало не от имени администратора, то я попробовал изменения сделать для текущего пользоватля (текущий пользователь является администратором домена, что эквивалентно правам локального администратора.

    «попробуйте выполнить команду cd \set-1cplatforms в PowerShell от текущего пользователя. »

    попробовать могу, но проблемы с этим не будет, так как у меня как у администратора домена там полный доступ. да и на данный момент эта папка используется в групповой политике для распространения 1С через механизм, описанный в статье http://infostart.ru/public/296227/ , поэтому настройки прав там сделаны корректно. Для верности проверил всё.

    Через cmd не работает, так как первой же командой не может включить возможность запуска скриптов.

    Так как я сам очень далек от PowerShell, то ориентируюсь например на эту статью http://pk-help.com/server/how-to-run-a-script-powershell/

    Для теста запустим PS от имени админа и попробуем запустить скрипт:

    PS C:Windowssystem32> \set-1cplatforms1cinst.ps1

    False

    False

    False

    программа установилась, захожу в панель управления, программы и компоненты, удаляю (надо сказать что значит он просто как 1С: Предприятие, без указания номера версии), запуска еще раз:

    PS C:Windowssystem32> \set-1cplatforms1cinst.ps1

    False

    отличие только в количестве False на выходе. Все поставилось снова.

    В общем нужно разобраться почему не работает включение запуска скриптов и как обойтись без запуска через start.

    Reply
  24. Dragonim

    (23)

    Вы не только далеки от PowerShell но и от понимания работы Windows.

    По команде start «\set-1cplatforms1Cinst.ps1» открывается блокнот, потому что это стандартная программа для открытия файла с расширением ps1, чему можно убедиться двойным кликом на фале с данным расширением. Данная команда в PS соответствует двойному клику по файлу.

    При запуске PS от имени админа попробуйте выполнить команду Set-ExecutionPolicy RemoteSigned -Force, а после команду Set-ExecutionPolicy Restricted -Force. Если ни каких ругательств не будет, то выполните файл 1C8InstallAndUninstall.cmd от имени администратора и у вас всё заработает.

    При установке 1С из скрипта номер версии указывается в столбце Версия.

    «False» это выводятся результаты работы некоторых строк в скрипте, что не говорит о результате работы скрипта. Результат работы скрипта можно увидит в логе.

    Reply
  25. EugeneBespalov

    (24)

    «Вы не только далеки от PowerShell но и от понимания работы Windows.»

    не будем начинать со взаимных оскорблений, я прекрасно понимаю как работает Start, я ради вас, чтобы вы видели все мои действия сделал все возможные варианты использования и сказал о результатах. Если хотите могу молчать, тогда вам придется проявить телепатические способности.

    «При запуске PS от имени админа попробуйте выполнить команду Set-ExecutionPolicy RemoteSigned -Force, а после команду Set-ExecutionPolicy Restricted -Force. Если ни каких ругательств не будет, то выполните файл 1C8InstallAndUninstall.cmd от имени администратора и у вас всё заработает.»

    PS C:Windowssystem32> Set-ExecutionPolicy RemoteSigned -Force

    PS C:Windowssystem32> Set-ExecutionPolicy Restricted -Force

    Set-ExecutionPolicy : Оболочка Windows PowerShell успешно обновила вашу политик

    у выполнения, но данный параметр переопределяется политикой, определенной в бол

    ее конкретной области. В связи с переопределением оболочка сохранит текущую пол

    итику выполнения «RemoteSigned». Для просмотра параметров политики выполнения в

    ведите «Get-ExecutionPolicy -List». Для получения дополнительных сведений введи

    те «Get-Help Set-ExecutionPolicy».

    строка:1 знак:1

    + Set-ExecutionPolicy Restricted -Force

    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], Sec

    urityException

    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Com

    mands.SetExecutionPolicyCommand

    А зачем нужна установка от имени админа? Руками я могу и без PS установить.

    «При установке 1С из скрипта номер версии указывается в столбце Версия.»

    это понятно, пишу о различиях с обычной установкой.

    Reply
  26. Dragonim

    (25)

    Ошибка при выполнении Set-ExecutionPolicy Restricted -Force связана с тем что вы выполняли ранее команду Set-ExecutionPolicy RemoteSigned -Force -Scope CurrentUser. Выполните команду Set-ExecutionPolicy Restricted -Force -Scope CurrentUser, а после Set-ExecutionPolicy Restricted -Force. Ошибка должна пропасть.

    «А зачем нужна установка от имени админа? Руками я могу и без PS установить.» При установке руками без явного указания запустить установочный файл от имени Администратора или установки из среды запущенной от имени Администратора, во всех системах выше Windows XP, вам придется повышать права во время установки. В это нет отличий.

    Запускать файл 1C8InstallAndUninstall.cmd от имени Администратора надо по 2 причинам, во-первых чтобы сработали команды Set-ExecutionPolicy RemoteSigned -Force и Set-ExecutionPolicy Restricted -Force, а во-вторых чтобы произвести установку 1С. Для эксперимента попробуйте выполнить Set-ExecutionPolicy RemoteSigned -Force в PS от имени Администратора, а после просто запустить PS без повышения привилегий и запустить скрипт по установке 1С. Не забудьте закрыть возможность запуска скриптов выполнив Set-ExecutionPolicy Restricted -Force в PS от имени Администратора.

    Reply
  27. EugeneBespalov

    допустим я все сделал и все работает, как это исправит ошибку:

    PS C:Usersxxx> start «\set-1cplatforms1Cinst.ps1» -dd ‘\set-1cplatforms’ -dl ‘\set-cplatformsLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1’

    Start-Process : Не удается найти параметр, соответствующий имени параметра «dd».

    строка:1 знак:39

    + start «\set-1cplatforms1Cinst.ps1» -dd ‘\set-1cplatforms’ -dl ‘\set-1cpla …

    + ~~~

    + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException

    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

    Reply
  28. Dragonim

    (27)

    Я не зря ранее писал про команду start «\set-1cplatforms1Cinst.ps1» которая открывала файл в блокноте. Вы допускаете ту же ошибку.

    start «\set-1cplatforms1Cinst.ps1» -dd ‘\set-1cplatforms’ -dl ‘\set-cplatformsLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1’

    Данной командой из PS работать не будет. Данная команда в PS превращается в:

    Start-Process -FilePath «\set-1cplatforms1Cinst.ps1» -dd ‘\set-1cplatforms’ -dl ‘\set-cplatformsLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1’

    Разумеется у командлета нет параметров -dd, -dl, -dp, -ip, -iod о чём сообщает полученная вами ошибка.

    Для запуска скрипта используйте прилагающийся cmd файл запуская его от имени Администратора. Необходимые параметры запуска прописывайте в cmd файле.

    Если очень сильно охота запустить скрипт из PS то можете попробовать команду

    Start-Process -FilePath powershell.exe -ArgumentList «‘\set-1cplatforms1Cinst.ps1’ -dd ‘\set-1cplatforms’ -dl ‘\set-cplatformsLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1′»

    Reply
  29. EugeneBespalov

    (28) понял где туплю, я в FAR нажимаю стрелку вверх и выбираю не ту строку, конечно нужно запускать

    powershell «\set-1cplatforms1Cinst.ps1» -dd ‘\set-1cplatforms’ -dl ‘\set-1cplatformsLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1’

    которая работает

    ———————————————————————————

    2015.01.14 13:19:42 Начало работы скрипта

    2015.01.14 13:19:50 Последняя (старшая) платформа 8.3.5.1383 уже установлена.

    2015.01.14 13:19:50 Окончание работы скрипта

    ———————————————————————————

    но это после включения разрешения на запуск руками.

    но будет ли работать включение разрешения на запуск скрипта от имени системной учетки при запуске из групповой политики? для локального варианта понятно что нужно пользоваться админом, а через групповые? просто у меня в политиках этот скрипт стоит со вчерашнего для а в логах пусто.

    Reply
  30. Dragonim

    (29)

    Как установить, обновить или удалить Платформу 1С, если имеется домен? Читайте статью, всё описное в ней проверено и работает.

    Reply
  31. EugeneBespalov

    (30) я хз, политика отрабатывает, ошибок нет, лог (ваш) пустой, эксперимент с cmd не давал картины о правильной выполнимости через политики, он работал только при запуске руками.

    в статье нет ни слова о таких проблемах.

    я думаю все же не сработало включение выполнения скриптов.

    Reply
  32. EugeneBespalov

    (30) всё работает. причина была весьма странной — лог файл обновляется значительно позже загрузки самого компьютера (мин 5-7). вообще для теста добавил пару строк в cmd:

    @echo 1 >>»\set-1cplatformsLogs ext.log»

    @start /wait powershell «Set-ExecutionPolicy RemoteSigned -Force»

    @echo 2 >>»\set-1cplatformsLogs ext.log»

    @powershell «\set-1cplatforms1Cinst.ps1» -dd ‘\set-1cplatforms’ -dl ‘\set-1cplatformsLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1’

    @echo 3 >>»\set-1cplatformsLogs ext.log»

    @start /wait powershell «Set-ExecutionPolicy Restricted -Force»

    @echo 4 >>\set-1cplatformsLogs ext.log

    @echo — >>»\set-1cplatformsLogs ext.log»

    сделал gpupdate /force и в ребут. после ребута появился файл лога от echo, захожу в лог скрипта, а там последний ребут до модификации cmd. удивился. много думал. отвлекся на другие дела. снова открываю лог скрипта, а там свежая информация об отработанном скрипте. пока это объяснить не могу, какая-то мистика. завтра будут логи по другим машинам, посмотрим. на машинах с XP не отработает, я там еще PS не ставил.

    спасибо за скрипт и что потратили время на разбор.

    Reply
  33. EugeneBespalov

    сегодня смотрю результаты работы скрипта:

    ———————————————————————————

    2015.01.15 07:39:54 Начало работы скрипта

    2015.01.15 07:39:56 Последняя (старшая) платформа уже установлена.

    2015.01.15 07:39:56 Окончание работы скрипта

    ———————————————————————————

    и в голову пришла мысль, что было бы неплохо иметь в логе номер версии продукта. полез в исходник, вижу:

    WriteLog $LogFile «Последняя (старшая) платформа $LastDistr уже установлена.»

    вроде как должна версия выводиться. проверяю все логи всех машин — везде так. И тут звонит телефон, чел вышел из отпуска, жалуется что 1С у него не запускается, мол версии не совпадают, смотрю логи, а у него результат работы скрипта показывает что старшая платформа уже установлена. Пошел в тот кабинет, там еще два компа выключены и без юзеров, включил, скрипт отработал, в логах написал что старшая версия уже установлена, но по факту это не так. Одна машина Windows 7, две — XP, все системы обновлены через WSUS, отдельно пробовал поставить KB с PS 2.0 — говорит что уже есть в системе. Где может быть косяк?

    Reply
  34. Dragonim

    (33)

    Попробуйте передать скрипту параметр ip с конкретной версией 1С. Посмотрите на логи.

    Reply
  35. EugeneBespalov

    ———————————————————————————

    2015.01.15 13:24:07 Начало работы скрипта

    2015.01.15 13:24:07 Установка 1С:Предприятие, версия 8.3.5.1383

    === Начало записи журнала: 15.01.2015 1

    Reply
  36. Dragonim

    (35)

    Скрипт устанавливается не во время логирования пользователя, а после включения компьютера. Попробуйте включить компьютер без входа под конкретного пользователя, через некоторое время скрипт отработает.

    Задержка при запуске скрипта это нормальное явление. Пользователь приходит утром, логиниться, пытается зайти в 1С, у него не получается, уходит наливать себе чай, возвращается, заходит в 1С, всё ОК.

    Reply
  37. EugeneBespalov

    (36) я знаю разницу между политикой для пользователя и для компьютера.

    Попробуйте включить компьютер без входа под конкретного пользователя, через некоторое время скрипт отработает.

    как вы себе это представляете на практике?

    Задержка при запуске скрипта это нормальное явление. Пользователь приходит утром, логиниться, пытается зайти в 1С, у него не получается, уходит наливать себе чай, возвращается, заходит в 1С, всё ОК.

    Вы наверное очень мало работали с пользователями. Никто не пойдет пить чай, а если и пойдет, то повторно никто ничего запускать не будет. Просидят пол дня, а потом с визгами «у меня 1с пол дня не работает» будут названивать. И зачем мне такая автоматизация? 🙂

    В текущей реализации это нерабочая схема. Вам нужно было все нюансы работы скрипта озвучить в статье, я бы, например, тогда не тратил на это время.

    Reply
  38. Dragonim

    (37)

    Задержка при запуске скрипта в домене при групповой политики на группу компьютеров это поведение AD, а не особенности работы скрипта. Если вы знаете как с этим бороться то просветите нас всех, мы будем благодарны. Для меня это не является проблемой, т.к. я устанавливаю новую платформу за несколько дней до её установки на сервере, а мои пользователи на предложение подождать 10 минут и попробовать снова реагируют абсолютно нормально если такая просьба поступает 1 раз в месяц или реже.

    В текущей реализации это нерабочая схема. Вам нужно было все нюансы работы скрипта озвучить в статье, я бы, например, тогда не тратил на это время.

    У хорошего админа всегда так, очень долго запрягает, а после, очень быстро едет, это называется автоматизация. В данном случае за вас сделана большая часть работы по обновлению 1С Платформы и выложена в виде скрипта. Если вы хотите сделать эту работу или подобную сами, или бегать от компьютера к компьютеру после работы устанавливая платформу 1С в ручном режиме, я не в праве вам мешать.

    Хочу напомнить пользователям данной теме, что я не прошу денег за свою работу. Если у вас имеется желание отблагодарить автора, то вы можете скачать скрипт за 1 $m или перевести автору более крупную сумму $m, если у вас нет желание благородить автора или нет такой возможности то вы можете забрать скрипт с гит хаба. Если вы хотите дополнить скрипт или предложить хорошую идею то я с удовольствием вас прочту, если хотите обругать автора и/или скрипт, то поставьте теме минус и удалить скрипт со своего компьютера. Помните, что проделанная работа другими людьми выкладывается в отрытый доступ бесплатно и никто вам ни чего не обязан.

    Reply
  39. blackhole321

    (37) EugeneBespalov

    На какой версии ОС наблюдаются задержки?

    В Windows 2012 R2 и Windows 8.1 время задержки выполнения logon скриптов по умолчанию составляет 5 минут. Вы можете изменить это поведение изменив значение параметра GPO

    Computer Configuration > Administrative Templates > System > Group Policy > Configure Logon Script Delay в 0, чтобы запретить задержку.

    http://blogs.technet.com/b/platformspfe/archive/2014/03/08/windows-8-1-logon-script-delay-group-policy-setting.aspx

    Reply
  40. EugeneBespalov

    (38) у меня платформа обновляется через АД в автоматическом режиме, никто никуда не бегает, никакие скрипты никто не ждет и чай не пьет. Ваш скрипт изучаю в целях самообразования, так как не знаком с PS, подобная схема привлекла внимание так как на ее основе мог бы делать другие вещи. Как показала практика — не все так красиво как хотелось бы. Никто не заставляет вас работать, но если уж написали — будьте добры не отказываться. Платить за что-то я привык, если оно работает как требуется. Вы не озвучили много допущений в работе скрипта, мне это не нравится и я это озвучил.

    Установка платформы по срокам — не моя забота, мне дают релиз и говорят что с понедельника она в работе, создаю пакет и обновляю политику, все. Утром все в работе. Сидеть на телефоне и слушать что у кого-то что-то не работает не входит в мой список развлечений.

    Reply
  41. EugeneBespalov

    (39) blackhole321, win8.1, win7, может я что-то знаю, но политики применяемые на компьютеры всегда не давали появиться окну для входа пользователя. Даже сейчас после включения скрипта в политики закрузка системы удлиннилась по времени на 1 минуту примерно, болтается надпись что-то вроде «Ожидание…» (win8.1) в win7 тоже какая-то надпись. И пока не отработает скрипт для ПК залогиниться не получается. У меня так много чего распространяется через VBS.

    Reply
  42. Dragonim

    (40)

    у меня платформа обновляется через АД в автоматическом режиме, никто никуда не бегает, никакие скрипты никто не ждет и чай не пьет.

    Я с большим удовольствием прочту вашу статью об автоматизации процесса установки/удаления/обновления платформы 1С в АД.

    Reply
  43. blackhole321

    (41) EugeneBespalov

    Дело в том, что существует два режима выполнения групповых политик — синхронный и асинхронный. В асинхронном режиме выполнение происходит в фоновом режиме и не препятствует входу пользователя в систему. По умолчанию выполнение осуществляется в асинхронном режиме. Вы можете изменить данное поведение, установив опцию

    Computer ConfigurationPoliciesAdministrative TemplatesSystemLogonAlways wait for the network at computer startup and logon

    http://blogs.technet.com/b/grouppolicy/archive/2013/05/23/group-policy-and-logon-impact.aspx

    Reply
  44. EugeneBespalov

    (43) blackhole321,

    «Эта политика предписывает при обнаружении медленного сетевого подключения пропускать обработку любого клиентского расширения групповой политики, которое требует синхронной обработки (то есть требует от компьютеров ожидать полной инициализации сети при загрузке компьютера и входе пользователя).

    Если вы включаете этот параметр политики, при обнаружении медленного сетевого подключения обработка групповой политики всегда выполняется асинхронно.

    Клиентские компьютеры не будут ожидать полной инициализации сети при загрузке и входе пользователя. Существующие пользователи будут входить в систему, используя кэшированные учетные данные,

    что сократит время входа в систему. Групповая политика будет применяться в фоновом режиме, когда сеть станет доступной.

    Обратите внимание, что, поскольку это фоновое обновление, расширения, требующие синхронной обработки, такие как «Установка программного обеспечения» и «Перенаправление папок»,

    а также расширение предпочтений «Сопоставления дисков» не будут применяться.»

    судя по описанию это не совсем так.

    Reply
  45. EugeneBespalov

    (42) эта статья есть, она не моя, с нее я и пришел на вашу статью.

    Reply
  46. DEG156

    Установил PowerShell 3.0.

    Вылетает ошибка: не удается индексировать в объект типа system.string

    Reply
  47. DEG156

    Unable to index into an object of type System.String.

    At \server1C_Soft1C8InstallAndUninstall.ps1:218 char:1

    + $Arr[$i] = $Arr[$i] + ‘.’ + $Arr[$i]

    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    + CategoryInfo : InvalidOperation: (:) [], RuntimeException

    + FullyQualifiedErrorId : CannotIndex

    Reply
  48. Dragonim

    (47)

    Не могу ответить на ваш вопрос, т.к. у меня в файлах это далеко не 218 строка.

    Reply
  49. DEG156

    # было найдено много дистрибутивов, найдём самый старший из них

    # тут я не смог придумать красивого и эффективного алгоритма, поэтому получилось ЭТО

    # алгоритм вымещения. будем брать по порядку каждую цифру до точки и искать максимальную из них.

    # те элементы у которых цифра меньше найденной максимальной будут зануляться

    $Arr = $AllPlatforms.Clone()

    # чтобы потом узнать какой из элементов ещё не занулён, продублируем строки

    For ($i = 0; $i -lt $Arr.Length; $i++) {

    $Arr[$i] = $Arr[$i] + ‘.’ + $Arr[$i]

    }

    Ошибка в этом месте: $Arr[$i] = $Arr[$i] + ‘.’ + $Arr[$i]

    Reply
  50. DEG156

    Переменная $Arr возвращает «8.2.19.121»

    Reply
  51. Dragonim

    (50)

    В переменной $Arr должен находиться массив скопированный из переменной $AllPlatforms. Проверьте что возвращается в переменной $Arr[0].и $AllPlatforms[0].

    Reply
  52. c4uran

    на локальном компе работает, а на удаленном нет вываливает ошибку тут:

    $Arr = $AllPlatforms.Clone()

    нельзя было сделать определение последней версии по дате создания файла (прим. Data1.cab) никто в здравом уме вроде не будет менять его

    Reply
  53. AdvUser

    Лично у меня скрипт через групповые политики так и не запустился, хотя при ручном запуске под правами администратора отрабатывает корректно. Кроме того выполнение скриптов через групповые политики работает с задержкой, тогда как обновить платформу нужно здесь и сейчас не ожидая когда произойдет тайное шаманство…

    Выход использовать бесплатную утилиту PsExec

    Команда на запуск скрипта будет иметь следующий вид:

    psexec @С:локальная_папкаcomp.txt -u доменИмя_Администратора \серверрасшаренная_папка1C8InstallAndUninstall.cmd

    comp.txt — файл где перечислены компы на которых нужно обновить платформу. Имя каждого компа должно начинаться с новой строчки, а не через запитую как сказано в инструкции утилиты.

    При старте утилита запросит пароль Администратора, при этом пароль нигде не светится и не сохраняется.

    За скрипт отдельное спасибо!

    Reply
  54. TeMochkiN

    да, через групповые политики чёт не работает. в логах всех машин пишет

    2015.05.14 16:31:19 Начало работы скрипта

    2015.05.14 16:31:25 Последняя (старшая) платформа уже установлена.

    2015.05.14 16:31:25 Окончание работы скрипта

    для исключения проблемы с правами, у папки с дистрибутивами ставил полный доступ для стандартной группы «Все» на уровне файловой системы и сетевой папки

    чего-то вы нам не дорассказали

    Reply
  55. Dragonim

    (54) TeMochkiN,

    Изменил файлы на инфостарте (взял с гитхаба) перекачайте архив. Теперь должен говорить какую из версий он считает последней (старшей), возможно это поможет выявить ошибку.

    (53) AdvUser,

    Задержка скрипта при работе в домене уже обсуждалась выше (ответ (39)).Это проблема доменной политики.

    В домене скрипт работает странно. Иногда всё ок, иногда не отрабатывает. В общем через раз работает, а разбираться что к чему нет времени и достаточно большой выборки компьютеров. Если появиться время то допишу скрипт для удалённой установке в домене без групповой политики, на подобии PsExec, но судя по загрузу до этого вряд ли руки дойдут.

    Reply
  56. demaxxx

    Все так просто пишут про запуск скрипта через батник или cmd, почему то никто не упоминает простую деталь — CMD не поддерживает пути в общие папки, поэтому батник не работает. (Указанный путь был использован при запуске CMD.EXE в качестве текущей папки.

    CMD.EXE не поддерживает пути UNC.)

    Reply
  57. ivtroitskiy

    Добрый день! А есть версия скрипта для Power Shell версии 2?

    Reply
  58. electro777

    А каким образом переносился код скрипта в cmd, или просто сохранили с расширением cmd?

    Reply
  59. demon_infernal

    Спасибо за скрипт.

    Отметил некорректную работу скрипта в том случае, если в папке с дистрибутивами лежит только одна папка.

    В таком случае строчка

    $AllPlatforms = (Get-ChildItem -Path $DistribDir | Where-Object { ($_.Mode -match «#k8SjZc9Dxkd*») -and ($_.Name -match $RegExpPatternNameFolderDistrib) }).Name
    

    возвращает массив из 10ти элементов, такого вида:

    8

    .

    3

    .

    6

    .

    2

    3

    9

    0

    — если в папке с дистрибутивами была только одна папка с именем «8.3.6.2390»

    Reply
  60. Dragonim

    Скрипт обновлён. Все подробности в нижней части поста.

    Reply
  61. Liks

    dp Может принимать несколько значений? через запятую?

    Reply
  62. Dragonim

    (61) Liks, Нет

    Можно запустить скрипт несколько раз указав ip=’no’, а dp такое какое хотите

    Reply
  63. Burninf

    Не очень понятно — при установке уровня безопасности RemoteSigned WinXP требует подписи скрипта, если скрипт находится в сети. Локально же выполняется нормально. Тогда как его запускать из сетевого каталога по этому руководству, если оттуда он наотрез отказывается выполняться?

    Reply
  64. Dragonim

    (63) Burninf, сочувствую

    Могу лишь посоветовать изменить bat файл. Сначала скопировать файл скрипта на локальный компьютер (команда copy), выполнить скрипт с локального диска, удалить файл скрипта (команда del).

    Reply
  65. incol

    при запуске скрипта вообще ничего не происходит , локально , политику безопасности снимаю вручную и запускаю скрипт , отрабатывает закрывается без ошибок….

    Reply
  66. Dragonim

    (65) incol, надо смотреть что пишится в логах

    Reply
  67. incol

    (66) спасибо что откликнулись! нашел ошибку оказывается регистр символов важен! , нашлась дургая проблема , все устанавливается как надо, но установлен ключ $dp = «no» , а удаление все равно происходит старых версий… сталкивался кто нибудь с этим?

    Reply
  68. lenafV

    Выдает ошибку 1945. Удаляет старые версии отлично, но вот новую не устанавливает, как исправить эту ошибку?…

    Параметры запуска скрипта: -dd ‘\WORK1CDistr’ -dl ‘\WORK1CLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=0 THINCLIENTFILE=0’

    2016.11.12 23:55:09 Начало работы скрипта

    2016.11.12 23:55:30 Установка 1С:Предприятие, версия 8.3.9.1850

    === Начало записи журнала: 12.11.2016 23:55:31 ===

    Ошибка 1945. You do not have sufficient privileges to complete the re-advertisement of this product. Re-advertisement requires initiation by a local system account calling the MsiAdvertiseScript API, such as through Group Policy Software Deployment.

    === Завершение записи журнала: 12.11.2016 23:55:32 ===

    2016.11.12 23:55:36 Окончание работы скрипта

    Reply
  69. Dragonim

    (68)

    Вот что пишет о данной ошибке MSDN https://msdn.microsoft.com/en-us/library/windows/desktop/aa372835(v=vs.85).aspx

    The process calling MsiAdvertiseScript must be running under the LocalSystem account.

    Что примерно переводится как: процесс должен быть запущен от имени пользователя «СИСТЕМА»

    Возможно ошибка вызвана тем что у вас установлен запуск скрипта во время залогинивание пользователей в систему, а не во время запуска системы.

    Reply
  70. adapter

    Смотрю тоже кто то с этим заморочился.

    По умолчанию автоматическое обновление платформы 1С можно настроить средствами самой платформы. Есть у 1cestart.exe такой режим. Но он предполагает права локального админа у пользователей.

    Через групповые политики неудобно потому что с большой задержкой. Сработает только когда компы перегрузятся. Т.е. на следующий день. А некоторые вообще свои компы не выключают на ночь. В итоге тяжело следить у кого вообще не отработало, а у кого еще не отработало 🙂

    Определить группу компьютеров и установить платформу можно и без GPO или назначенных заданий. Например через psExcec. Тоже поддерживается современными Windows из коробки. Не важно домен у вас или нет, а может и вообще VPN с филиалами. И запускается сразу, без суточного ожидания перезагрузки. Проблема в том что бы потом вести актуальность этих групп, добавлятьудалять компы. А если еще есть подгруппы с разными версиями платформ по базам то вообще тяжело.

    Я когда то делал это в HelpDesk Corp

    http://infostart.ru/public/73535/

    через Дистанционное Выполнение Команд

    http://helpdesk.adaptersoft.ru/?p=554

    Reply
  71. Armando

    С автоматным обновлением серверной части 64 бит кто-нибудь заморачивался?

    Как устанавливаете com компоненту? Как конфиги веб-серверов исправляете под новую версию?

    Reply
  72. vshish

    Почитал. Очень интересный скрипт. Попробую, но у меня вопрос-идея. Если надо установить только тонкий клиент и есть дистрибутив тонкого клиента, то установку производить с каталога дистрибутива тонкого клиента. (все дело в размерах дистрибутивов)

    пысы. Хотя конечно можно и не заморачиваться, а создавать два набора папок дистрибутивов. (для тонкого и толстого клиента)

    Reply
  73. Dragonim

    (72) Я проверил. Установка тонкого клиента проходит без проблем. В скрипт добавлена проверка на невозможность установки тонкого 64 битного клиента на 32 битную платформу.

    Reply
  74. Fox_sx

    Дорабатывал старую версию для себя.. если пригодится:

    менял строку bat-файла:

    @powershell «\Server1CDistr1C8InstallAndUninstall.ps1» -dd ‘\Server1CDistr’ -dl ‘\Server1CLogs’ -ip ‘last’ -dp ‘ael’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1

    на:

    @powershell «%~dp01C8InstallAndUninstall.ps1» -dd %~dp0 -dl ‘%~dp01CLogs’ -ip ‘last’ -dp ‘ael’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1’

    %~dp0 — текущая папка исполняемого файла

    менял PS-файл:

    Текущая папка:

    param([string]$dd = «\1CServer1CDistr»,

    [string]$dl = «\1CServer1CLogs»,

    на:

    param([string]$dd = (Get-Item -Path «.» -Verbose).FullName,

    [string]$dl = (Get-Item -Path «.» -Verbose).FullName + «1CLogs»

    Проверка разрядности:

    $ComputerName = $Env:COMPUTERNAME

    $PCbased = (Get-WmiObject Win32_ComputerSystem -computer $ComputerName).systemtype

    If

    ($PCbased -eq «X86-based PC»)

    {$pathdll = join-path $Env:SystemDrive «Program Files»}

    else {

    if

    ($PCbased -eq «X64-based PC»)

    {$pathdll = join-path $Env:SystemDrive «Program Files (x86)»}

    else {}

    }

    Регистрация comcntr.dll: (не «регилась» автоматом)

    Start-Process ‘regsvr32.exe’ «/s «»$pathdll1cv8$ProductVerincomcntr.dll» -Wait -NoNewWindow -PassThru

    Также иногда кидал в текущую папку ПолезнуюДЛЛ.dll: (в особых случаях)

    Copy-Item -Path ($DistribDir+»ПолезнаяДЛЛ.dll») -Destination ($pathdll + «1cv8» + $ProductVer + «inПолезнаяДЛЛ.dll») -Force

    Лог получался примерно такой:

    Параметры запуска скрипта: -dd ‘\pc14Установка1сDistr’ -dl ‘\pc14Установка1сDistr1CLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1’

    2016.02.12 10:01:10 Начало работы скрипта

    2016.02.12 10:01:15 Удаление 1С:Предприятие, версия

    2016.02.12 10:01:16 Установка 1С:Предприятие, версия 8.3.7.1917

    2016.02.12 10:01:31 Скопирован файл ПолезнаяДЛЛ.dll из \pcУстановка1сDistr в C:Program Files (x86)8.3.7.1917in

    2016.02.12 10:01:33 Регистрация dll: C:Program Files (x86)1cv88.3.7.1917incomcntr.dll

    2016.02.12 10:01:33 Найден только один дистрибутив 8.3.7.1917. Удаление произведено не будет, т.к. данный дистрибутив является последним (старшим).

    2016.02.12 10:01:33 Окончание работы скрипта

    Reply
  75. NixonRu

    Добрый день

    помогите пожалуйста

    скрипт не выполняется при старте пк

    если потом залогинеться и запустить в ручную то все срабатывает

    запускается пк скрипт выполняется таксегодня в 17:18

    Параметры запуска скрипта: -dd ‘\neosrvkrdshare1cdistr’ -dl ‘\neosrvkrdshare1cdistr1clog’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=0 THINCLIENTFILE=0’

    2017.01.09 17:03:46 Начало работы скрипта

    2017.01.09 17:03:52 Установка 1С:Предприятие, версия 8.3.9.2033

    2017.01.09 17:03:54 После установки не была найдена платформа 8.3.9.2033 на данном компьютере. Работа скрипта прервана.

    2017.01.09 17:03:54 Окончание работы скриптасегодня в 17:18

    после загрузки пк запускаю в ручную в итоге все ставитсясегодня в 17:21

    Параметры запуска скрипта: -dd ‘\neosrvkrdshare1cdistr’ -dl ‘\neosrvkrdshare1cdistr1clog’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=0 THINCLIENTFILE=0’

    2017.01.09 17:19:36 Начало работы скрипта

    2017.01.09 17:19:44 Установка 1С:Предприятие, версия 8.3.9.2033

    === Начало записи журнала: 09.01.2017 17:19:45 ===

    === Завершение записи журнала: 09.01.2017 17:20:18 ===

    === Начало записи журнала: 09.01.2017 17:20:18 ===

    === Завершение записи журнала: 09.01.2017 17:20:30 ===

    2017.01.09 17:20:33 Окончание работы скрипта

    Reply
  76. Dragonim

    (75) Судя по ошибки у вас не хватает прав на установку в первом случае, а во втором случае вы производите запуск от имени администратора. У вас стоит установка скрипта при загрузки компьютера или при входе пользователя? Т.е. logon или startup.

    Reply
  77. NixonRu

    (76)

    конфигурация компьютера

    автозагрузка

    Reply
  78. user643327_infostart

    Подскажите пожалуйста:

    как определить версию, которая [была] установлена на компьютере,

    не имея к нему непосредственного доступа, а только удалённый (т.е. только по сети)

    или имея только диск с этого компьютера,

    загрузиться с которого нет возможности

    ?

    Выглядит оно примерно вот так:

    C:Program Files1cv88.3.5.1486in1cv8.exe 823,79 Кб 05.03.2015 01:37 -a—
    C:Program Files1cv88.3.5.1486in1cv8c.exe 637,29 Кб 05.03.2015 01:37 -a—
    C:Program Files1cv88.3.5.1486in1cv8s.exe 771,29 Кб 05.03.2015 01:37 -a—
    C:Program Files1cv88.3.5.1517in1cv8.exe 823,79 Кб 20.03.2015 02:43 -a—
    C:Program Files1cv88.3.5.1517in1cv8c.exe 637,29 Кб 20.03.2015 02:43 -a—
    C:Program Files1cv88.3.5.1517in1cv8s.exe 771,29 Кб 20.03.2015 02:44 -a—
    C:Program Files1cv8common1cestart.exe 378,29 Кб 20.03.2015 02:43 -a—
    C:Program Files1cv828.2.18.109in1cv8.exe 674,29 Кб 09.07.2013 17:36 -a—
    C:Program Files1cv828.2.18.109in1cv8c.exe 531,79 Кб 09.07.2013 17:36 -a—
    C:Program Files1cv828.2.18.109in1cv8s.exe 680,79 Кб 09.07.2013 17:36 -a—
    C:Program Files1cv82common1cestart.exe 335,79 Кб 09.07.2013 17:36 -a—
    

    Показать

    Всегда ли версия, указанная при сборке (т.е. свойства файла, вкладка «Подробно» в проводнике Win7) соответствует действительности?

    Всегда ли её видно?

    Каким [именно/ещё] образом проверяется совместимость (с файловой базой, с конфигурацией, с сервером приложений, с SQL-базой)

    ?

    Reply
  79. user643327_infostart

    Если не туда написал — ткните носом в правильном направлении.

    Поиском пользовался, доступа к ИТС пока нет.

    Reply
  80. Serg0FFan

    1) Если использовать обычный способ установки, то вот тут http://s001.radikal.ru/i193/1705/46/9ff53835045d.png в скобочках еще и версию показывает, у вас же её нет (возможно вы так и планировали, но не удобно).

    2) Там же на скрине, видно что установлен продукт «1С Предприятие — Работа с файлами», так вот если использовать параметр «all» то данный продукт удаляется, да так, что в списке установленных программ он есть, но ничего с ним сделать нельзя, ни удалить, ни восстановить, ни с нормального дистрибутива что-то сделать с ним.

    P.S. Windows 10 RS1 x64 LTSB RUS

    Reply
  81. Dragonim

    (80)

    1 Я знаю о таком поведении, но не разбирался в нём, т.к. версия написана справа в соответствующей колонки и мне этого достаточно.

    2. О таком возможном поведении скрипта при ключе «all» я догадываюсь, в связи с алгоритмом удаления. Именно по этому в инструкцию, при описании работы ключа «all», изначально были добавлены слова: «Экстенсивными, потому что, удалены будут все продукты на компьютере хотя бы призрачно напоминающие платформу 1С».

    Reply
  82. demaxxx

    Dim Dragonim, может быть добавите в скрипт функцию, описанную Evgeny Gerasimov (Fox_sx), а именно

    Регистрация comcntr.dll: (не «регилась» автоматом)

    Start-Process ‘regsvr32.exe’ «/s «»$pathdll1cv8$ProductVerincomcntr.dll» -Wait -NoNewWindow -PassThru

    ?jav * ascript:void(0);

    Reply
  83. user841580
    Reply
  84. demon_infernal

    (83)

    Supplementary Distribution

    Возможно, пробел в пути «Supplementary Distribution» ? возьмите весь путь в кавычки

    Reply
  85. Dragonim

    (83)

    Судя по всему у вас какой-то невидимый знак в начале файла, такое бывает если вы редактировали файл, например, в word.

    Попробуйте взять файл bat с github и отредактировать его в Notepad++.

    Так же попробуйте удалить все пустые строки и строки с комментариями оставив только строки с командами.

    Reply
  86. user841580

    Похоже проблема была в пробеле в пути «Supplementary Distribution», сделал путь без пробелов 🙂

    Теперь пол дня ломаю голову и гугл над командой Set-ExecutionPolicy RemoteSigned -Force, точнее над тем, почему она не проходит, а еще точнее, что надо сделать, что бы она прошла?

    Запустил в PS эту команду, он мне ответил следующее:

    Set-ExecutionPolicy RemoteSigned -Force
    Set-ExecutionPolicy : Windows PowerShell upd ated your execution policy successfully, but the setting is overridden by
    a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective
    execution policy of Unrestricted. Type «Get-ExecutionPolicy -List» to view your execution policy settings. For more
    information please see «Get-Help Set-ExecutionPolicy».
    At line:1 char:1
    + Se t-ExecutionPolicy RemoteSigned -Force
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

    Показать

    не понимаю, что за «more specific scope»

    на всякий случай покажу, что выдает Get-ExecutionPolicy -list

    Get-ExecutionPolicy -list
    
    Scope                                             ExecutionPolicy
    ——                                             —————
    MachinePolicy                                                Unrestricted
    UserPolicy                                                Unrestricted
    Process                                                  Restricted
    CurrentUser                                                Unrestricted
    LocalMachine                                                RemoteSigned

    Показать

    Подскажите пожалуйста, что делать?

    Reply
  87. ivansuh

    Подскажите куда копать!

    На пк не установлена 1с!

    Ставим через гп!

    Вот что в логах!

    Параметры запуска скрипта: -dd ‘\server01Software1C1CDistr’ -dl ‘\server05 emp1CLogs’ -dp ‘ael’ -ip ‘last’ -iod ‘DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1’

    2017.11.09 12:28:03 Начало работы скрипта

    2017.11.09 12:28:32 Последняя (старшая) платформа 8.3.10.2639 уже установлена.

    2017.11.09 12:28:32 Окончание работы скрипта

    ———————————————————————————

    Reply
  88. ivansuh

    Подскажите как удалить определенные версии, несколько? как указать dp=?

    Reply
  89. ivansuh

    (87) С этой проблемой разобрались!

    Reply
  90. Dragonim

    (88) такого функционала в скрипте не предусмотрено. Можно запустить скрипт несколько раз каждый раз указав какую конкретную версию надо удалить.

    Так же вы можете доработать скрипт введя в него необходимый функционал.

    Reply
  91. Ameh

    Добрый день, пользуюсь вашим скриптом, все в порядке.Недавно возник вопрос о необходимости разной установки (удаленка только тонкие клиенты, остальным толстые). Может быть вы в курсе как проверить какие компоненты 1С установлены на машине, и в зависимости от этого формировать ключи для утсановки?

    Reply
  92. Dragonim

    (91) Ни когда не задавался задачей понять какие компоненты платформы установлены на текущем компьютере. Можно посмотреть какие файлы есть в каталоге с конфигурацией 1cv8.exe, 1cv8c.exe, 1cv8s.exe и таким образом понять какие компоненты установлены.

    Если всё работает, то какая разница что установлено. При новом обновлении устанавливаешь так чтобы всё необходимое работало, а старое удаляешь. Мне кажется такой подход более продуктивен. Конечно если нет задачи ревизии на текущий момент.

    Reply
  93. Ameh

    (92)

    Спасибо за ответ, в принципе уже так и сделал по поиску файлов. Просто задача устанавливать 3 разных набора компонентов, поэтому проще смотреть, что установлено и ставить новую платформу с теми же компонентами.

    Reply
  94. Vovan58

    Почему-то на компьютерах с Win 10 не проходит запуск скрипта, точнее только один раз. В Win 7 — все в порядке. В чем может быть засада?

    Reply
  95. Vovan58

    Прикол, через неделю на одном Win 10 запустился, на другом — нет… А так вроде все по схеме делал…

    Reply
  96. METAL

    Спасибо за разработку! Но никак не взлетает.. ((

    В чём может быть проблема? См.скриншот

    Даёт ошибку: «File D:CMDInstall1C8InstallAndUninstall.ps1 cannot be loaded. The file D:CMDInstall1C8InstallAndUninstall.ps1 is not digitally signed. The script will not execute on the system. Please see «get-help about_signing» for more details..»

    Reply
  97. Dragonim

    (96) Попробуйте поменять в bat файле часть строки

    @start /wait powershell «Set-ExecutionPolicy RemoteSigned -Force»

    Смените RemoteSigned на Bypass

    Reply
  98. lopatin

    У меня вот такая ошибка на Windows XP:

    После установки не была найдена платформа 8.3.12.1529 на данном компьютере. Работа скрипта прервана.

    Не ручной запуск скрипта, не по домену.. Запуск непосредственно установщика ставит платформу. Через скрипт не работает.

    Reply
  99. adminnpt

    (77)Такая же ерунда. Подскажите решение нашли?

    Reply

Leave a Comment

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