Почему VBS-скрипт зависает при запуске через планировщик задач Windows и как это исправить?

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

Нередко системные администраторы и разработчики 1С сталкиваются с ситуацией, когда служебный VBS-скрипт (например, для запуска обменов, архивации, выгрузки данных или обслуживания баз) прекрасно отрабатывает при ручном запуске двойным кликом мыши, но намертво зависает в статусе «Задание выполняется в настоящее время» при старте через планировщик задач (Windows Task Scheduler). При этом реальных действий скрипт не выполняет, а процесс продолжает висеть в памяти.

Разберем детально, почему возникает такое поведение в среде Windows Server, какие скрытые механизмы изолированных сессий блокируют работу скриптов 1С и как по шагам правильно настроить регламентное задание.

Причины зависания скриптов в планировщике задач

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

  1. Изоляция неинтерактивной «Сессии 0» (Session 0 Isolation) и модальные окна: Когда задача запускается в фоновом режиме (особенно с параметром выполнения вне зависимости от входа пользователя), она стартует в скрытом служебном сеансе. Если скрипт, вызываемый COM-объект или платформа 1С пытается вывести любое диалоговое окно (MsgBox, ошибку, предупреждение безопасности или лицензирования), это окно ждет реакции пользователя в невидимой сессии, полностью блокируя выполнение потока.
  2. Запуск через графический хост вместо консольного: По умолчанию файлы .vbs ассоциированы с wscript.exe. Этот интерпретатор ориентирован на работу с графическим интерфейсом. Для автоматических пакетных задач необходимо использовать исключительно консольный интерпретатор cscript.exe в тихом пакетном режиме.
  3. Несовпадение разрядности (32-бит и 64-бит): Если в скрипте инициализируется COM-соединение с 1С (например, V83.COMConnector), разрядность интерпретатора должна совпадать с разрядностью зарегистрированной COM-компоненты. При попытке запустить 32-битный коннектор из 64-битного cscript.exe без предварительной настройки COM+ скрипт завершится аварийно или зависнет.
  4. Отсутствие каталогов системного профиля для COM-объектов Office и 1С: При создании COM-объектов некоторыми библиотеками требуется наличие каталога рабочего стола в системном профиле Windows. Если этих папок нет, процесс COM зависает в ожидании инициализации профиля.
  5. Использование сетевых дисков с буквами вместо прямых UNC-путей: Подключенные диски (такие как Z:\) существуют только внутри сеанса конкретного пользователя. Фоновый процесс планировщика не видит этих подключений и зависает при попытке обращения к файловой системе.

Шаг 1. Корректная настройка действия в планировщике задач

Рассмотрим, как правильно прописать команду запуска сценария. Нельзя указывать сам VBS-файл в поле программы — запуск должен производиться через явный вызов исполняемого файла интерпретатора.

  1. Откроем свойства задачи в планировщике и перейдем на вкладку «Действия» (Actions).
  2. В поле «Программа или сценарий» (Program/script) укажем полный путь к cscript.exe с учетом требуемой разрядности:

    Для 64-разрядного режима:

    C:\Windows\System32\cscript.exe

    Для 32-разрядного режима:

    C:\Windows\SysWOW64\cscript.exe

  3. В поле «Добавить аргументы» (Add arguments) укажем параметры подавления логотипа, включения пакетного режима без всплывающих окон и путь к файлу скрипта:

    //B //NoLogo "C:\Scripts\My1CScript.vbs"

    Ключ //B (Batch mode) гарантирует, что любые попытки вызова предупреждений и диалогов будут автоматически подавлены без блокировки выполнения.

  4. В поле «Рабочая папка» (Start in) обязательно укажем каталог, в котором лежит скрипт (например, C:\Scripts\), чтобы избежать проблем с относительными путями.

Шаг 2. Создание каталогов Desktop для системного профиля

Выясним причину частых сбоев при работе COM-автоматизации (включая работу с объектами Excel, Word и компонентами 1С). Службы Windows при выполнении под учетными записями SYSTEM, LOCAL SERVICE или при неинтерактивном входе обращаются к профилю systemprofile. Если папка Desktop отсутствует, инициализация COM-интерфейсов зависает.

Создадим вручную следующие каталоги на сервере:

  1. Для 32-битной среды: C:\Windows\System32\config\systemprofile\Desktop
  2. Для 64-битной среды: C:\Windows\SysWOW64\config\systemprofile\Desktop

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

Шаг 3. Доработка VBS-скрипта: обработка ошибок и логирование

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


Option Explicit

On Error Resume Next

Dim fso, logFile, logPath
logPath = "C:\Scripts\task_log.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
Set logFile = fso.OpenTextFile(logPath, 8, True)

logFile.WriteLine "--- Старт выполнения: " & Now & " ---"

Dim connector, connection
Set connector = CreateObject("V83.COMConnector")

If Err.Number <> 0 Then
    logFile.WriteLine "Ошибка создания COM-коннектора: " & Err.Description
    WScript.Quit 1
End If

' Строка подключения к информационной базе 1С (используем прямые сетевые или серверные пути)
Dim connectionString
connectionString = "Srvr=""1c-server"";Ref=""trade_base"";Usr=""Admin"";Pwd=""SecretPassword"";"

Set connection = connector.Connect(connectionString)

If Err.Number <> 0 Then
    logFile.WriteLine "Ошибка авторизации в 1С: " & Err.Description
    WScript.Quit 1
Else
    logFile.WriteLine "Подключение к 1С успешно установлено."
End If

' Выполнение целевого действия в базе данных
' Например, вызов экспортной процедуры общего модуля
connection.РегламентныеПроцедурыСервер.ВыполнитьРегламентнуюОбработку()

If Err.Number <> 0 Then
    logFile.WriteLine "Ошибка при выполнении логики 1С: " & Err.Description
Else
    logFile.WriteLine "Регламентная процедура успешно завершена."
End If

logFile.WriteLine "--- Завершение работы: " & Now & " ---"
logFile.Close

WScript.Quit 0

Шаг 4. Настройка параметров безопасности и ограничений времени

Разберем параметры безопасности самой задачи в планировщике Windows:

  1. На вкладке «Общие» (General) выберем режим «Выполнять для всех пользователей» (Run whether user is logged on or not) и обязательно установим флаг «Выполнять с наивысшими правами» (Run with highest privileges).
  2. Убедимся, что учетная запись запуска имеет локальное системное право Вход в качестве пакетного задания (Log on as a batch job) в оснастке локальной политики безопасности (secpol.msc).
  3. На вкладке «Параметры» (Settings) обязательно активируем пункт «Останавливать задачу, выполняющуюся дольше» (Stop the task if it runs longer than) и выставим разумный лимит (например, 1 или 2 часа). Это предотвратит бесконечную блокировку последующих регламентных запусков, если скрипт все же зависнет.

Соблюдение этих правил гарантирует стабильный запуск VBS-сценариев в неинтерактивном окружении Windows Server без зависания процессов в памяти.

← На главную