gifts2017

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

Опубликовал Dim Dragonim (Dragonim) в раздел Администрирование - Системное

Существует множество способов установки и обновления платформы 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” — тонкий клиент с возможностью работы с файловыми информационными базами

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

upd:2015-12-07

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

upd:2016-11-21

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

Скачать файлы

Наименование Файл Версия Размер
1C8InstallAndUninstall 230
.zip 6,38Kb
21.11.16
230
.zip 1.03 6,38Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Евгений Беспалов (EugeneBespalov) 22.10.14 09:35
Я понимаю что можно и bat, но всё же логичнее было бы говорить и использовать cmd, всё равно ваш скрипт в DOS не будет работать.
2. Юлия Лобода (LobodaYu) 27.10.14 10:25
при выполнении скрипта выдает ошибку:
Неверная числовая константа: 1.
строка:1 знак:2
+ 1 <<<< C8InstallAndUninstall.ps1
+ CategoryInfo : ParserError: (1:StecordException
+ FullyQualifiedErrorId : BadNumericConstant
3. Юлия Лобода (LobodaYu) 27.10.14 10:31
Помогите разобраться
Прикрепленные файлы:
4. Юлия Лобода (LobodaYu) 27.10.14 11:11
--------------------------------------------------------------------------------
POWERSHELL EXCEPTION
EXCEPTION TYPE:System.Management.Automation.ParameterBindingException
MESSAGE:Не удается найти параметр, соответствующий имени параметра "Directory".
POSITION:
строка:259 знак:64
+ $AllPlatforms = (Get-ChildItem -Path $DistribDir -Directory <<<< | Where-Object {$_.Name -match $RegExpPatternNameFolderDistrib}).Name
--------------------------------------------------------------------------------
5. Dim Dragonim (Dragonim) 27.10.14 11:44
(4) Судя по всему у вас нет папок с дистрибутивами в директории где они должны быть.

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

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

Читайте внимательно описание параметров скрипта и что где должно находиться.
6. Юлия Лобода (LobodaYu) 27.10.14 12:56
Все папки вроде на месте (прикладываю скан)
Прикрепленные файлы:
7. Юлия Лобода (LobodaYu) 27.10.14 12:59
В скрипте заменил пути (\\server) на свои (\\srv2012) и сохранил с кодировкой 1251 ANSI
8. Юлия Лобода (LobodaYu) 27.10.14 13:04
В скрипте заменил пути (\\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>])
9. Юлия Лобода (LobodaYu) 27.10.14 15:49
в логе пишет
---------------------------------------------------------------------------------
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
10. Юлия Лобода (LobodaYu) 27.10.14 19:30
Командлет 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 все тут-же запустилось и установилось! Автору огромное спасибо за его разработку!
11. Dim Dragonim (Dragonim) 28.10.14 09:25
(9) Если скрипт отработал с непредвиденной ошибкой, то смотреть на логи не имеет смысла, вероятнее всего там тоже имеется ошибка

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

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

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

https://github.com/Dragonim/1C8InstallAndUninstall.git
12. Юлия Лобода (LobodaYu) 28.10.14 10:20
С новой версией скрипта работает и на второй версии PowerShell.
Есть пожелание расширить данные ключа "iod" для установки компонентов:
DESIGNERALLCLIENTS – все клиенты и конфигуратор.
THINCLIENT – тонкий клиент для клиент-серверного варианта работы.
THINCLIENTFILE – тонкий клиент с возможностью работы с файловыми информационными базами.
SERVER – сервер «1С:Предприятия». Если программа установки запускается из программы запуска, то сервер будет установлен как приложение.
WEBSERVEREXT – компоненты расширения для веб-сервера.
CONFREPOSSERVER – сервер хранилища конфигураций «1С:Предприятия».
SERVERCLIENT – компоненты для администрирования кластера серверов «1С:Предприятия».
CONVERTER77 – конвертер информационных баз из версии «1С:Предприятия 7.7».
LANGUAGES – список языков интерфейса для установки

Как бы также красиво раздать пользователям список баз данных в домене?
13. Dim Dragonim (Dragonim) 28.10.14 11:02
(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 содержит в строки
CommonCfgLocation=\\server\1c\1cescmn.cfg
CommonInfoBases=\\server\1С\bases.v8i

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

в интернете много об этом описано, вот одна из статей http://habrahabr.ru/post/179405/
14. Андрей (h00k) 04.11.14 04:30
(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_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")

	'Проверка ОС
	if OsVer = "5.0" or OsVer = "5.1" or OsVer = "5.2" then

		'Windows 2000 or XP or 2003
		File1CEStart = WshShell.ExpandEnvironmentStrings("%ALLUSERSPROFILE%") & "\Application Data\1C\1CEStart\1CEStart.cfg"

	Else

		'Windows Vista or 7 or 2008
		File1CEStart = WshShell.ExpandEnvironmentStrings("%ALLUSERSPROFILE%") & "\1C\1CEStart\1CEStart.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 общие базы можно раздать еще красивше - веб-сервисом.
15. Юрий Лоек (loekyn) 17.11.14 16:59
Что бы исключить ошибку с ключем -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 подставлять? Смотрел через Орку, никаких ключей на эту тему там вроде нет. Совсем без ключей не устанавливает ничего, хотя что то долго делает.
16. Dim Dragonim (Dragonim) 18.11.14 08:14
(15) Данная проблема была исправлена, смотри новый скрипт на https://github.com/Dragonim/1C8InstallAndUninstall.git

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

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

Если вы хотите чтобы все эти параметры работали в скрипте, то необходимо убрать проверку ключа "iod" в функции InstallPlatform
17. Юрий Лоек (loekyn) 18.11.14 09:21
Все что надо я в скрипте изменил. Возможность установки серверной части в скрипте есть - надо только ставить подходящие значения в iod.
Необходимость установки серверной части вызвана желанием полностью автоматизировать процесс обновления релизов 1С от конфигураций до платформы. На текущий момент не хватает сущего пустяка: как установить сервер 64. Что там в iod надо подставить? Нигде не нашел для сервера 64.
18. Евгений Беспалов (EugeneBespalov) 13.01.15 10:55
(17) loekyn, какая жуть :) ставить платформу скриптом, это же бесконтрольно. обновление платформы все равно делает ответственный человек.
19. Евгений Беспалов (EugeneBespalov) 13.01.15 12:47
скрипт взял с гитхаба, что через cmd что напрямую пишет одно и то же:
1Cinst.ps1 : Имя "1Cinst.ps1" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите
попытку.
строка:1 знак:1
+ 1Cinst.ps1 -dd '\\set-1c\platforms' -dl '\\set-1c\platforms\Logs' -dp 'ael' -ip ...
+ ~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (1Cinst.ps1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
---
ось 8.1, админ домена
20. Dim Dragonim (Dragonim) 13.01.15 13:03
(19)
1Cinst.ps1 ??? Не вижу такого файла на ГитХабе.

Видимо вы правили скрипты под себя и выставили некорректные параметры или изменили ту часть скриптов в которую не стоит лезть без чёткого понимания происходящего.
21. Евгений Беспалов (EugeneBespalov) 14.01.15 05:32
(20) Dragonim, я изменил название файла? не люблю длинные бессмысленные названия, когда можно назвать коротко. Могу переименовать назад, результат не изменится. Содержимое правил только в контексте переменных:
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

отработала нормально. теперь запустим файл скрипта:
PS C:\Users\xxx> "\\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'
строка:1 знак:33
+ "\\set-1c\platforms\1Cinst.ps1" -dd '\\set-1c\platforms' -dl '\\set-1c\platforms ...
+ ~~~
Непредвиденная лексема "-dd" в выражении или операторе.

и еще куча подобных ошибок, запустим так:
PS C:\Users\xxx> start "\\set-1c\platforms\1Cinst.ps1" -dd '\\set-1c\platforms' -dl '\\set-c\platforms\Logs' -dp 'ael' -ip 'last' -iod 'DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1'
Start-Process : Не удается найти параметр, соответствующий имени параметра "dd".
строка:1 знак:39
+ start "\\set-1c\platforms\1Cinst.ps1" -dd '\\set-1c\platforms' -dl '\\set-1c\pla ...
+ ~~~
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

давайте запустим без параметров, благо в коде есть параметры по умолчанию:
PS C:\Users\xxx> start "\\set-1c\platforms\1Cinst.ps1"

скрипт открылся в блокноте. у меня больше нет вариантов что и как пнуть.
22. Dim Dragonim (Dragonim) 14.01.15 07:53
(21)
Вы не написали результат выполнения последней команды.
Вы изменили политику безопасности запуска скрипта для данного пользователя, это не позволит скрипту выполнить установку 1С.

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

Есть подозрения, что у вас проблема с правами доступа. Для сетевых папок должно быть соблюдено 2 разрешения, первое это настройки прав доступа на уровне доступа к папке по сети, второе это настройки прав доступа на уровне файловой системы. Проверти права доступа к папке во вкладке Доступ и Безопасность соответственно. Если они выставлены правильно, то перезапишите все права доступа на уровне файловой системы для всех вложенных объектов.
23. Евгений Беспалов (EugeneBespalov) 14.01.15 08:30
(22) Dragonim, нет результата выполнения последней команды, файл ps1 просто открылся в Блокноте.
Политику я не менял, я просто в ручном режиме выполнил команды из вашего же CMD, но так как изменение политики не работало не от имени администратора, то я попробовал изменения сделать для текущего пользоватля (текущий пользователь является администратором домена, что эквивалентно правам локального администратора.

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

Через cmd не работает, так как первой же командой не может включить возможность запуска скриптов.
Так как я сам очень далек от PowerShell, то ориентируюсь например на эту статью http://pk-help.com/server/how-to-run-a-script-powershell/
Для теста запустим PS от имени админа и попробуем запустить скрипт:
PS C:\Windows\system32> \\set-1c\platforms\1cinst.ps1
False
False
False

программа установилась, захожу в панель управления, программы и компоненты, удаляю (надо сказать что значит он просто как 1С: Предприятие, без указания номера версии), запуска еще раз:
PS C:\Windows\system32> \\set-1c\platforms\1cinst.ps1
False

отличие только в количестве False на выходе. Все поставилось снова.
В общем нужно разобраться почему не работает включение запуска скриптов и как обойтись без запуска через start.
24. Dim Dragonim (Dragonim) 14.01.15 09:08
(23)
Вы не только далеки от PowerShell но и от понимания работы Windows.

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

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

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

"False" это выводятся результаты работы некоторых строк в скрипте, что не говорит о результате работы скрипта. Результат работы скрипта можно увидит в логе.
25. Евгений Беспалов (EugeneBespalov) 14.01.15 09:18
(24) Dragonim,
"Вы не только далеки от PowerShell но и от понимания работы Windows."
не будем начинать со взаимных оскорблений, я прекрасно понимаю как работает Start, я ради вас, чтобы вы видели все мои действия сделал все возможные варианты использования и сказал о результатах. Если хотите могу молчать, тогда вам придется проявить телепатические способности.

"При запуске PS от имени админа попробуйте выполнить команду Set-ExecutionPolicy RemoteSigned -Force, а после команду Set-ExecutionPolicy Restricted -Force. Если ни каких ругательств не будет, то выполните файл 1C8InstallAndUninstall.cmd от имени администратора и у вас всё заработает."
PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned -Force
PS C:\Windows\system32> 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С из скрипта номер версии указывается в столбце Версия."
это понятно, пишу о различиях с обычной установкой.



26. Dim Dragonim (Dragonim) 14.01.15 09:28
(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 от имени Администратора.
27. Евгений Беспалов (EugeneBespalov) 14.01.15 10:08
допустим я все сделал и все работает, как это исправит ошибку:
PS C:\Users\xxx> start "\\set-1c\platforms\1Cinst.ps1" -dd '\\set-1c\platforms' -dl '\\set-c\platforms\Logs' -dp 'ael' -ip 'last' -iod 'DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1'
Start-Process : Не удается найти параметр, соответствующий имени параметра "dd".
строка:1 знак:39
+ start "\\set-1c\platforms\1Cinst.ps1" -dd '\\set-1c\platforms' -dl '\\set-1c\pla ...
+ ~~~
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
28. Dim Dragonim (Dragonim) 14.01.15 10:16
(27)
Я не зря ранее писал про команду start "\\set-1c\platforms\1Cinst.ps1" которая открывала файл в блокноте. Вы допускаете ту же ошибку.

start "\\set-1c\platforms\1Cinst.ps1" -dd '\\set-1c\platforms' -dl '\\set-c\platforms\Logs' -dp 'ael' -ip 'last' -iod 'DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1'

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

Start-Process -FilePath "\\set-1c\platforms\1Cinst.ps1" -dd '\\set-1c\platforms' -dl '\\set-c\platforms\Logs' -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-1c\platforms\1Cinst.ps1' -dd '\\set-1c\platforms' -dl '\\set-c\platforms\Logs' -dp 'ael' -ip 'last' -iod 'DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1'"
29. Евгений Беспалов (EugeneBespalov) 14.01.15 10:29
(28) Dragonim, понял где туплю, я в FAR нажимаю стрелку вверх и выбираю не ту строку, конечно нужно запускать

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'

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

---------------------------------------------------------------------------------
2015.01.14 13:19:42 Начало работы скрипта
2015.01.14 13:19:50 Последняя (старшая) платформа 8.3.5.1383 уже установлена.
2015.01.14 13:19:50 Окончание работы скрипта
---------------------------------------------------------------------------------

но это после включения разрешения на запуск руками.
но будет ли работать включение разрешения на запуск скрипта от имени системной учетки при запуске из групповой политики? для локального варианта понятно что нужно пользоваться админом, а через групповые? просто у меня в политиках этот скрипт стоит со вчерашнего для а в логах пусто.
30. Dim Dragonim (Dragonim) 14.01.15 10:37
(29)

Как установить, обновить или удалить Платформу 1С, если имеется домен? Читайте статью, всё описное в ней проверено и работает.
31. Евгений Беспалов (EugeneBespalov) 14.01.15 12:42
(30) Dragonim, я хз, политика отрабатывает, ошибок нет, лог (ваш) пустой, эксперимент с cmd не давал картины о правильной выполнимости через политики, он работал только при запуске руками.
в статье нет ни слова о таких проблемах.

я думаю все же не сработало включение выполнения скриптов.
32. Евгений Беспалов (EugeneBespalov) 14.01.15 13:21
(30) Dragonim, всё работает. причина была весьма странной - лог файл обновляется значительно позже загрузки самого компьютера (мин 5-7). вообще для теста добавил пару строк в cmd:
@echo 1 >>"\\set-1c\platforms\Logs\text.log"
@start /wait powershell "Set-ExecutionPolicy RemoteSigned -Force"
@echo 2 >>"\\set-1c\platforms\Logs\text.log"
@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'
@echo 3 >>"\\set-1c\platforms\Logs\text.log"
@start /wait powershell "Set-ExecutionPolicy Restricted -Force"
@echo 4 >>\\set-1c\platforms\Logs\text.log
@echo --- >>"\\set-1c\platforms\Logs\text.log"

сделал gpupdate /force и в ребут. после ребута появился файл лога от echo, захожу в лог скрипта, а там последний ребут до модификации cmd. удивился. много думал. отвлекся на другие дела. снова открываю лог скрипта, а там свежая информация об отработанном скрипте. пока это объяснить не могу, какая-то мистика. завтра будут логи по другим машинам, посмотрим. на машинах с XP не отработает, я там еще PS не ставил.
спасибо за скрипт и что потратили время на разбор.
33. Евгений Беспалов (EugeneBespalov) 15.01.15 05:47
сегодня смотрю результаты работы скрипта:
---------------------------------------------------------------------------------
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 - говорит что уже есть в системе. Где может быть косяк?
34. Dim Dragonim (Dragonim) 15.01.15 09:58
(33)
Попробуйте передать скрипту параметр ip с конкретной версией 1С. Посмотрите на логи.
35. Евгений Беспалов (EugeneBespalov) 15.01.15 10:32
---------------------------------------------------------------------------------
2015.01.15 13:24:07 Начало работы скрипта
2015.01.15 13:24:07 Установка 1С:Предприятие, версия 8.3.5.1383
=== Начало записи журнала: 15.01.2015 13:24:08 ===
Ошибка 1945. Недостаточно прав для завершения повторного объявления этого продукта. Для повторного объявления необходимо, чтобы локальная системная учетная запись выступила инициатором вызова API MsiAdvertiseScript, например через групповую политику развертывания приложений.
=== Завершение записи журнала: 15.01.2015 13:24:09 ===
=== Начало записи журнала: 15.01.2015 13:24:09 ===
=== Завершение записи журнала: 15.01.2015 13:24:10 ===
2015.01.15 13:26:26 Окончание работы скрипта
---------------------------------------------------------------------------------
добавлю что опять ситуация с появлением лога повторяется, то есть комп загрузился, я залогинился, зашел в папку с логами, а там пусто. подождал примерно 3 минуты и только потом появился лог. значит ли что установка программы идет в фоне когда юзер уже залогинился и не вызовет ли это проблем в работе, например юзер утром пришел, залогинился, запускает 1С а у него ошибка несовпадения версий?
36. Dim Dragonim (Dragonim) 15.01.15 11:22
(35)
Скрипт устанавливается не во время логирования пользователя, а после включения компьютера. Попробуйте включить компьютер без входа под конкретного пользователя, через некоторое время скрипт отработает.

Задержка при запуске скрипта это нормальное явление. Пользователь приходит утром, логиниться, пытается зайти в 1С, у него не получается, уходит наливать себе чай, возвращается, заходит в 1С, всё ОК.
37. Евгений Беспалов (EugeneBespalov) 16.01.15 04:50
(36) Dragonim, я знаю разницу между политикой для пользователя и для компьютера.

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

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

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

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

В текущей реализации это нерабочая схема. Вам нужно было все нюансы работы скрипта озвучить в статье, я бы, например, тогда не тратил на это время.
38. Dim Dragonim (Dragonim) 16.01.15 22:02
(37)
Задержка при запуске скрипта в домене при групповой политики на группу компьютеров это поведение AD, а не особенности работы скрипта. Если вы знаете как с этим бороться то просветите нас всех, мы будем благодарны. Для меня это не является проблемой, т.к. я устанавливаю новую платформу за несколько дней до её установки на сервере, а мои пользователи на предложение подождать 10 минут и попробовать снова реагируют абсолютно нормально если такая просьба поступает 1 раз в месяц или реже.

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


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

Хочу напомнить пользователям данной теме, что я не прошу денег за свою работу. Если у вас имеется желание отблагодарить автора, то вы можете скачать скрипт за 1 $m или перевести автору более крупную сумму $m, если у вас нет желание благородить автора или нет такой возможности то вы можете забрать скрипт с гит хаба. Если вы хотите дополнить скрипт или предложить хорошую идею то я с удовольствием вас прочту, если хотите обругать автора и/или скрипт, то поставьте теме минус и удалить скрипт со своего компьютера. Помните, что проделанная работа другими людьми выкладывается в отрытый доступ бесплатно и никто вам ни чего не обязан.
39. Юрий Дешин (blackhole321) 17.01.15 01:10
(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
40. Евгений Беспалов (EugeneBespalov) 17.01.15 11:12
(38) Dragonim, у меня платформа обновляется через АД в автоматическом режиме, никто никуда не бегает, никакие скрипты никто не ждет и чай не пьет. Ваш скрипт изучаю в целях самообразования, так как не знаком с PS, подобная схема привлекла внимание так как на ее основе мог бы делать другие вещи. Как показала практика - не все так красиво как хотелось бы. Никто не заставляет вас работать, но если уж написали - будьте добры не отказываться. Платить за что-то я привык, если оно работает как требуется. Вы не озвучили много допущений в работе скрипта, мне это не нравится и я это озвучил.
Установка платформы по срокам - не моя забота, мне дают релиз и говорят что с понедельника она в работе, создаю пакет и обновляю политику, все. Утром все в работе. Сидеть на телефоне и слушать что у кого-то что-то не работает не входит в мой список развлечений.
41. Евгений Беспалов (EugeneBespalov) 17.01.15 11:17
(39) blackhole321, win8.1, win7, может я что-то знаю, но политики применяемые на компьютеры всегда не давали появиться окну для входа пользователя. Даже сейчас после включения скрипта в политики закрузка системы удлиннилась по времени на 1 минуту примерно, болтается надпись что-то вроде "Ожидание..." (win8.1) в win7 тоже какая-то надпись. И пока не отработает скрипт для ПК залогиниться не получается. У меня так много чего распространяется через VBS.
42. Dim Dragonim (Dragonim) 17.01.15 13:57
(40)
у меня платформа обновляется через АД в автоматическом режиме, никто никуда не бегает, никакие скрипты никто не ждет и чай не пьет.


Я с большим удовольствием прочту вашу статью об автоматизации процесса установки/удаления/обновления платформы 1С в АД.
43. Юрий Дешин (blackhole321) 17.01.15 15:06
(41) EugeneBespalov
Дело в том, что существует два режима выполнения групповых политик - синхронный и асинхронный. В асинхронном режиме выполнение происходит в фоновом режиме и не препятствует входу пользователя в систему. По умолчанию выполнение осуществляется в асинхронном режиме. Вы можете изменить данное поведение, установив опцию
Computer Configuration\Policies\Administrative Templates\System\Logon\Always 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
44. Евгений Беспалов (EugeneBespalov) 19.01.15 09:01
(43) blackhole321,

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

Если вы включаете этот параметр политики, при обнаружении медленного сетевого подключения обработка групповой политики всегда выполняется асинхронно.
Клиентские компьютеры не будут ожидать полной инициализации сети при загрузке и входе пользователя. Существующие пользователи будут входить в систему, используя кэшированные учетные данные,
что сократит время входа в систему. Групповая политика будет применяться в фоновом режиме, когда сеть станет доступной.
Обратите внимание, что, поскольку это фоновое обновление, расширения, требующие синхронной обработки, такие как «Установка программного обеспечения» и «Перенаправление папок»,
а также расширение предпочтений «Сопоставления дисков» не будут применяться."

судя по описанию это не совсем так.
45. Евгений Беспалов (EugeneBespalov) 19.01.15 09:10
(42) Dragonim, эта статья есть, она не моя, с нее я и пришел на вашу статью.
46. Евгений Дегтярев (DEG156) 29.01.15 08:29
Установил PowerShell 3.0.

Вылетает ошибка: не удается индексировать в объект типа system.string
47. Евгений Дегтярев (DEG156) 29.01.15 08:54
Unable to index into an object of type System.String.
At \\server\1C_Soft\1C8InstallAndUninstall.ps1:218 char:1
+ $Arr[$i] = $Arr[$i] + '.' + $Arr[$i]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex
48. Dim Dragonim (Dragonim) 29.01.15 17:50
(47)

Не могу ответить на ваш вопрос, т.к. у меня в файлах это далеко не 218 строка.
49. Евгений Дегтярев (DEG156) 29.01.15 17:54
# было найдено много дистрибутивов, найдём самый старший из них
# тут я не смог придумать красивого и эффективного алгоритма, поэтому получилось ЭТО
# алгоритм вымещения. будем брать по порядку каждую цифру до точки и искать максимальную из них.
# те элементы у которых цифра меньше найденной максимальной будут зануляться
$Arr = $AllPlatforms.Clone()
# чтобы потом узнать какой из элементов ещё не занулён, продублируем строки
For ($i = 0; $i -lt $Arr.Length; $i++) {
$Arr[$i] = $Arr[$i] + '.' + $Arr[$i]
}

Ошибка в этом месте: $Arr[$i] = $Arr[$i] + '.' + $Arr[$i]
50. Евгений Дегтярев (DEG156) 29.01.15 17:57
Переменная $Arr возвращает "8.2.19.121"
51. Dim Dragonim (Dragonim) 29.01.15 21:28
(50)

В переменной $Arr должен находиться массив скопированный из переменной $AllPlatforms. Проверьте что возвращается в переменной $Arr[0].и $AllPlatforms[0].
52. c4uran mmm (c4uran) 27.02.15 16:20
на локальном компе работает, а на удаленном нет вываливает ошибку тут:
$Arr = $AllPlatforms.Clone()

нельзя было сделать определение последней версии по дате создания файла (прим. Data1.cab) никто в здравом уме вроде не будет менять его
53. Антон Ильиных (AdvUser) 25.04.15 01:38
Лично у меня скрипт через групповые политики так и не запустился, хотя при ручном запуске под правами администратора отрабатывает корректно. Кроме того выполнение скриптов через групповые политики работает с задержкой, тогда как обновить платформу нужно здесь и сейчас не ожидая когда произойдет тайное шаманство...
Выход использовать бесплатную утилиту PsExec
Команда на запуск скрипта будет иметь следующий вид:
psexec @С:\локальная_папка\comp.txt -u домен\Имя_Администратора \\сервер\расшаренная_папка\1C8InstallAndUninstall.cmd
comp.txt - файл где перечислены компы на которых нужно обновить платформу. Имя каждого компа должно начинаться с новой строчки, а не через запитую как сказано в инструкции утилиты.
При старте утилита запросит пароль Администратора, при этом пароль нигде не светится и не сохраняется.

За скрипт отдельное спасибо!
54. Артём Артёмов (TeMochkiN) 18.05.15 10:09
да, через групповые политики чёт не работает. в логах всех машин пишет

2015.05.14 16:31:19 Начало работы скрипта
2015.05.14 16:31:25 Последняя (старшая) платформа уже установлена.
2015.05.14 16:31:25 Окончание работы скрипта

для исключения проблемы с правами, у папки с дистрибутивами ставил полный доступ для стандартной группы "Все" на уровне файловой системы и сетевой папки
чего-то вы нам не дорассказали
55. Dim Dragonim (Dragonim) 18.05.15 14:41
(54) TeMochkiN,
Изменил файлы на инфостарте (взял с гитхаба) перекачайте архив. Теперь должен говорить какую из версий он считает последней (старшей), возможно это поможет выявить ошибку.

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

В домене скрипт работает странно. Иногда всё ок, иногда не отрабатывает. В общем через раз работает, а разбираться что к чему нет времени и достаточно большой выборки компьютеров. Если появиться время то допишу скрипт для удалённой установке в домене без групповой политики, на подобии PsExec, но судя по загрузу до этого вряд ли руки дойдут.
56. ДДД ДДД (demaxxx) 07.09.15 15:53
Все так просто пишут про запуск скрипта через батник или cmd, почему то никто не упоминает простую деталь - CMD не поддерживает пути в общие папки, поэтому батник не работает. (Указанный путь был использован при запуске CMD.EXE в качестве текущей папки.
CMD.EXE не поддерживает пути UNC.)
57. Илья Троицкий (ivtroitskiy) 24.09.15 08:56
Добрый день! А есть версия скрипта для Power Shell версии 2?
58. Василий Поддубный (electro777) 28.09.15 17:41
А каким образом переносился код скрипта в cmd, или просто сохранили с расширением cmd?
59. Сергей Шевченко (demon_infernal) 09.11.15 07:41
Спасибо за скрипт.
Отметил некорректную работу скрипта в том случае, если в папке с дистрибутивами лежит только одна папка.
В таком случае строчка
$AllPlatforms = (Get-ChildItem -Path $DistribDir | Where-Object { ($_.Mode -match "^d*") -and ($_.Name -match $RegExpPatternNameFolderDistrib) }).Name

возвращает массив из 10ти элементов, такого вида:
8
.
3
.
6
.
2
3
9
0

- если в папке с дистрибутивами была только одна папка с именем "8.3.6.2390"
60. Dim Dragonim (Dragonim) 08.12.15 06:59
Скрипт обновлён. Все подробности в нижней части поста.
61. Дмитрий шарапов (Liks) 10.01.16 23:01
dp Может принимать несколько значений? через запятую?
62. Dim Dragonim (Dragonim) 11.01.16 11:37
(61) Liks, Нет
Можно запустить скрипт несколько раз указав ip='no', а dp такое какое хотите
63. Roman Kos (Burninf) 21.01.16 12:09
Не очень понятно - при установке уровня безопасности RemoteSigned WinXP требует подписи скрипта, если скрипт находится в сети. Локально же выполняется нормально. Тогда как его запускать из сетевого каталога по этому руководству, если оттуда он наотрез отказывается выполняться?
64. Dim Dragonim (Dragonim) 21.01.16 22:35
(63) Burninf, сочувствую
Могу лишь посоветовать изменить bat файл. Сначала скопировать файл скрипта на локальный компьютер (команда copy), выполнить скрипт с локального диска, удалить файл скрипта (команда del).
65. 1 1 (incol) 19.02.16 16:03
при запуске скрипта вообще ничего не происходит , локально , политику безопасности снимаю вручную и запускаю скрипт , отрабатывает закрывается без ошибок....
66. Dim Dragonim (Dragonim) 19.02.16 17:48
(65) incol, надо смотреть что пишится в логах
67. 1 1 (incol) 20.02.16 13:29
(66) Dragonim, спасибо что откликнулись! нашел ошибку оказывается регистр символов важен! , нашлась дургая проблема , все устанавливается как надо, но установлен ключ $dp = "no" , а удаление все равно происходит старых версий... сталкивался кто нибудь с этим?
68. Елена Фролова (lenafV) 12.11.16 17:28
Выдает ошибку 1945. Удаляет старые версии отлично, но вот новую не устанавливает, как исправить эту ошибку?...

Параметры запуска скрипта: -dd '\\WORK1C\Distr' -dl '\\WORK1C\Logs' -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 Окончание работы скрипта
69. Dim Dragonim (Dragonim) 17.11.16 12:20
(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.
Что примерно переводится как: процесс должен быть запущен от имени пользователя "СИСТЕМА"

Возможно ошибка вызвана тем что у вас установлен запуск скрипта во время залогинивание пользователей в систему, а не во время запуска системы.
70. Adapter Бахтыреев (adapter) 22.11.16 23:56
Смотрю тоже кто то с этим заморочился.

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

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

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

Я когда то делал это в HelpDesk Corp
http://infostart.ru/public/73535/

через Дистанционное Выполнение Команд
http://helpdesk.adaptersoft.ru/?p=554
71. Armando Armando (Armando) 23.11.16 21:47
С автоматным обновлением серверной части 64 бит кто-нибудь заморачивался?
Как устанавливаете com компоненту? Как конфиги веб-серверов исправляете под новую версию?
72. Виктор Шишов (vshish) 24.11.16 08:43
Почитал. Очень интересный скрипт. Попробую, но у меня вопрос-идея. Если надо установить только тонкий клиент и есть дистрибутив тонкого клиента, то установку производить с каталога дистрибутива тонкого клиента. (все дело в размерах дистрибутивов)
пысы. Хотя конечно можно и не заморачиваться, а создавать два набора папок дистрибутивов. (для тонкого и толстого клиента)
73. Dim Dragonim (Dragonim) 25.11.16 14:23
(72) Я проверил. Установка тонкого клиента проходит без проблем. В скрипт добавлена проверка на невозможность установки тонкого 64 битного клиента на 32 битную платформу.
74. Evgeny Gerasimov (Fox_sx) 04.12.16 15:34
Дорабатывал старую версию для себя.. если пригодится:

менял строку bat-файла:
@powershell "\\Server\1CDistr\1C8InstallAndUninstall.ps1" -dd '\\Server\1CDistr' -dl '\\Server\1CLogs' -ip 'last' -dp 'ael' -iod 'DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1
на:
@powershell "%~dp0\1C8InstallAndUninstall.ps1" -dd %~dp0 -dl '%~dp01CLogs' -ip 'last' -dp 'ael' -iod 'DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=1'

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

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

Текущая папка:
param([string]$dd = "\\1CServer\1CDistr",
[string]$dl = "\\1CServer\1CLogs",
на:
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 ""$pathdll\1cv8\$ProductVer\bin\comcntr.dll" -Wait -NoNewWindow -PassThru

Также иногда кидал в текущую папку ПолезнуюДЛЛ.dll: (в особых случаях)
Copy-Item -Path ($DistribDir+"ПолезнаяДЛЛ.dll") -Destination ($pathdll + "\1cv8\" + $ProductVer + "\bin\ПолезнаяДЛЛ.dll") -Force

Лог получался примерно такой:
Параметры запуска скрипта: -dd '\\pc14\Установка1с\Distr\' -dl '\\pc14\Установка1с\Distr\1CLogs' -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.1917\bin
2016.02.12 10:01:33 Регистрация dll: C:\Program Files (x86)\1cv8\8.3.7.1917\bin\comcntr.dll
2016.02.12 10:01:33 Найден только один дистрибутив 8.3.7.1917. Удаление произведено не будет, т.к. данный дистрибутив является последним (старшим).
2016.02.12 10:01:33 Окончание работы скрипта
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа