Как запустить PowerShell скрипт из 1С и получить от него данные обратно?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе автоматизации бизнес-процессов часто возникают ситуации, когда стандартных средств 1С недостаточно для взаимодействия с облачными сервисами, такими как SharePoint. В таких случаях программисты обращаются к PowerShell, который обладает мощными библиотеками для работы с API Microsoft. Давайте разберем, как правильно организовать обмен данными между 1С и PowerShell, чтобы не просто «запустить и забыть», а получить результат работы скрипта для дальнейшей обработки.

Вариант 1: Обмен данными через промежуточный файл

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

Рассмотрим по шагам, как реализовать этот механизм:

  1. Подготовка PowerShell-скрипта: Модифицируйте ваш скрипт так, чтобы он не просто выводил данные в консоль через Write-Host, а преобразовывал результат в строку JSON и записывал её в файл.
  2. Запуск из 1С: Используйте стандартную процедуру ЗапуститьПриложение или КомандаСистемы.
  3. Чтение данных: После завершения работы скрипта, 1С открывает файл, считывает содержимое и десериализует JSON в структуру или массив 1С.

Пример реализации вызова в 1С:


ИмяФайлаРезультата = ПолучитьИмяВременногоФайла("json");
Команда = "powershell.exe -ExecutionPolicy Bypass -File ""C:\Scripts\GetSharePointData.ps1"" -OutputFile """ + ИмяФайлаРезультата + """";
ЗапуститьПриложение(Команда, , Истина); // Истина ожидает завершения скрипта

Если ФС.СуществуетФайл(ИмяФайлаРезультата) Тогда
    Чтение = Новый ЧтениеJSON;
    Чтение.ОткрытьФайл(ИмяФайлаРезультата);
    Данные = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
КонецЕсли;

Вариант 2: Использование стандартного потока вывода (stdout)

Если вы хотите избежать создания лишних файлов на диске, можно перехватить вывод скрипта напрямую в оперативную память. Для этих целей применяется объект WScript.Shell. Метод Exec возвращает объект, который позволяет считывать данные, отправляемые скриптом в стандартный поток вывода.

Этот способ позволяет работать с данными в режиме «реального времени», однако требует внимательности при работе с кодировками вывода PowerShell.

Вариант 3: Использование внешних COM-компонент

Для более тесной интеграции можно рассмотреть использование специальных библиотек, таких как ActiveXPosh. Такие компоненты позволяют вызывать методы PowerShell прямо внутри сеанса 1С. Это избавляет от необходимости запускать каждый раз новый процесс powershell.exe, что существенно экономит ресурсы сервера и ускоряет работу.

Однако помните: использование внешних COM-компонент требует предварительной регистрации библиотек на сервере 1С, что может быть ограничено политиками безопасности вашей компании.

Архитектурная рекомендация: переходим на REST API

Если ваша задача — получение данных из SharePoint, мы настоятельно рекомендуем рассмотреть отказ от «прокладки» в виде PowerShell. Современные стандарты взаимодействия подразумевают использование прямого обращения к REST API SharePoint. Это самый «кошерный» способ интеграции:

Для реализации этого метода в 1С используйте объекты HTTPСоединение и HTTPЗапрос. Получив Bearer-токен (авторизация), вы сможете получать любые списки SharePoint напрямую в формате JSON, который 1С понимает «из коробки» с помощью функции ПрочитатьJSON. Для отладки и тестирования таких запросов можно применить обработку для тестирования REST API прямо в 1С.

Обработка ошибок

Каким бы методом вы ни воспользовались, не забывайте про контроль выполнения:

Подводя итог: если скрипт уже написан и менять его нельзя, используйте первый вариант с JSON-файлом — он наиболее стабилен и прост в отладке. Если вы только начинаете разработку — смотрите в сторону прямого обращения к REST API SharePoint из встроенного языка 1С.

← На главную