Автозагрузка, установка платформы 1С (PowerShell)

Если у вас нет RDP, нет или не настроено AD, а обновить платформу на большом количестве ПК как-то надо, то Вам сюда.

Предыстория: 1с PostgreSQL на Centos’e, организована работа удаленных пользователей через нэтбуки (Windows 10).

Подключение: тонкий клиент, права минимальные. (что в 1с, что в ОС на пк).

Задача: автоматизировать обновление платформы на нэтбуках.

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

 

Решение: (загрузка и установка средствами 1с и Powershell)

 

В 1с создаём пользователя: "Установка платформы" с минимальными правами,  для него в конфигураторе снимаем галку

"Защита от опасных действий", чтобы не пугать пользователей лишними сообщениями.

Добавляем обработку в необходимую подсистему, всё лишнее убираем.

 

Сценарий находится в макете (сохраняем с раширением ps1, адаптируем под себя)

Изменяем следующие данные:

$Object.MapNetworkDrive( $DISK, "\88.88.88.111server", "true", "Пользователь", "ПарольПользователя" )

88.88.88.111server" — адрес и имя сетевого диска с обновлениями

"Пользователь", "ПарольПользователя" —  Имя пользователя и Пароль, под которым можно подключиться к диску

$TARGET=$objShell.NameSpace("B:1C64Klient")

1C64Klient — Путь к папке установочных файлов платформы на сетевом диске

$secpasswd = ConvertTo-SecureString "ПарольАдминистратораПК" -AsPlainText -Force

"ПарольАдминистратораПК" — Пароль Администраторской учетной записи на ПК  (на всех нэтбуках единая учетная запись для администратора)

$mycreds = New-Object System.Management.Automation.PSCredential ("ИмяПользователяАдминистратора", $secpasswd)

"ИмяПользователяАдминистратора" — Имя администраторской учетной записи на ПК.

Сохраняем, загружаем обратно в макет.

Порядок работы обработки:

Пользователь запускает подключенную обработку, файл сценария  Powershell сохраняется в каталог на Диск С, Приложение 1с закрывается, запускается сценарий Powershell:

1) Подключение к сетевому диску

2) Копирование файлов установки платформы

3) Отключение сетевого диска

4) Установка платформы от имени администратора (тихий режим установки, от пользователя потребуется 1 раз подтвердить вносимые изменения — (контроль учетных записей Windows ( в 8 проходило без него, в 10  не удалось обойти)).

5) Удаление папки установки и файла сценария
 

Тестировалось на Платформе 8.3.11.3034 (ERP 2.4.5.129)

25 Comments

  1. blackhole321

    Я правильно понимаю, что на каждый нетбук копируется файл скрипта PowerShell, где открытым текстом вбит пароль локального администратора компьютера (в Вашем случае всех рабочих станций)?

    Reply
  2. blackhole321

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

    $session = New-PSSession -ComputerName ИмяКомпьютера -Credential ВашиУчетныеДанные

    Invoke-Command -Command ВашаКомандаИлиСкриптБлок -Session $session

    Reply
  3. login1020

    (1) Да так и есть, не самый лучший вариант в плане безопасности, но в моём случае удаленки к ним нет, как и постоянного интернет соединения, а обновлять 60 + машин, плюс заставлять людей приезжать с ними в офис не самое приятное решение.

    Reply
  4. login1020

    (2) Можно по-подробнее?

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

    Reply
  5. blackhole321

    (4)

    из вне к ним не подключиться

    Тогда приведенный мной вариант не годится.

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

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

    Reply
  6. blackhole321

    (4)

    Что-то типа:

    while($true)

    {

    Start-Sleep -Seconds ВашТаймаут

    $result = Invoke-WebRequest -Uri УРЛВашегоСервераОбновлений

    # Удобно передавать данные через json

    $jsonObject = ConvertFrom-Json -InputObject $result

    if (jsonObject.UpdateFlag -eq $true)

    {

    # Обновляем

    }

    }

    Reply
  7. login1020

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

    Да, удобно и безопаснее, подходит для настройки новых машин, старые не переделать, пока в руки не принесут.

    Reply
  8. kolya_tlt

    а есть решение не палить пароль админа?

    Reply
  9. login1020

    (8) Оно В (5)

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

    Планировщик

    Reply
  10. login1020

    (8) Как вариант можно сохранять файл сценария в Temp файлы и оттуда запускать, там его не найти хотя бы рядовому пользователю, или же через планировщик указывать напрямую от кого и что запускать

    Reply
  11. blackhole321

    (10)

    Как вариант можно сохранять файл сценария в Temp файлы и оттуда запускать, там его не найти хотя бы рядовому пользователю

    Наверное — это не очень удачно т.к. работает до тех пор, пока кто-либо не озаботился этим вопросом.

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

    Reply
  12. login1020

    (11) Linux

    Reply
  13. blackhole321

    (12)У Вас вся инфраструктура на Linux, только клиенты Windows?

    Reply
  14. login1020

    (13) Сервер Линуксовый, на нём же и 1с висит. Клиенты Windows начиная от xp заканчивая 10.

    Reply
  15. blackhole321

    (14)Ну если начиная с XP :), тогда наверное скрипты.

    Reply
  16. u_n_k_n_o_w_n

    Как я понимаю после первой установки, следующие платформы можно просто устанавливать простым копированием.

    А просто скопировать можно любым пользователем из любого ресурса, лишь бы у пользователя была запись на папку, в которой хранятся установленные платформы. Если конечно КП пользуются windows.

    Reply
  17. login1020

    (16) Примерно так, можно сохранять во временные файлы, они всегда доступны для записи

    Reply
  18. RocKeR_13

    Есть же стандартные способы у платформы: настройте автообновление через файл 1CEStart.cfg (https://infostart.ru/public/648457/), а в качестве папки с версиями платформ укажите папку из любого облака. Тот же Disk-O подключается как сетевая папка, что позволит вам на всех компьютерах унифицировать путь к каталогу с платформой

    Reply
  19. login1020

    (18) Все бы ничего, но читаем комментарий (2) в теме что Вы прикрепили. Установить под пользователем не получится, нужны права администратора. И GPO тоже нет, потому имеем, что имеем.

    Reply
  20. blackhole321

    (19)

    (19)

    Все бы ничего, но читаем комментарий (2) в теме что Вы прикрепили. Установить под пользователем не получится, нужны права администратора. И GPO тоже нет, потому имеем, что имеем.

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

    Reply
  21. login1020

    (20) Это понятно, что логин и пароль администратора в этом случае не хранятся на локальной машине. Но здесь Мы рассматривали вариант, что у нас нет ни AD, ни GPO соответственно. Так как мне использую настройки CFG файла выполнить установку под пользователем без администраторских прав?

    Если все это можно было бы задать в CFG на сервере, я был бы только рад.

    Reply
  22. blackhole321

    (21)

    Так как мне использую настройки CFG файла выполнить установку под пользователем без администраторских прав?

    Почему без админских прав то?

    Если на клиентской стороне есть статический ip адрес, то Вы можете подключиться со своего компьютера при помощи powershell и выполнить все необходимые действия, какие Вам нужны. Для этого не нужна AD и не нужны GPO.

    Reply
  23. blackhole321

    (21)В общем случае наличие статического ip не требуется, если ваши клиенты могут регистрироваться на dns сервере (который вы можете поднять и у себя), чтобы Вы знали, куда подключаться.

    Reply
  24. login1020

    (22) Статических практически нет, но я все равно не пойму. Можете описать реализацию скачивания и установки, имея cfg при помощи powershell?

    Reply
  25. RocKeR_13

    (19) надо попробовать в тот же планировщик запихнуть запуск 1С от админа: скорей всего запустит установку платформы также под админом

    Reply

Leave a Comment

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