Помилка Can not find script engine VBScript for script

Днями зіткнувся з проблемою неможливості запуску будь-яких скриптів vbs (Visual Basic Script) на комп'ютері з Windows 7. Як виявилося, проблема досить поширена і зустрічається у всіх версіях Windows, починаючи з XP і закінчуючи Widows 8.

Проблема наступна: при спробі запустити будь-який vbs скрипт на комп'ютері з'являється помилка:

CScript Error: Can not find script engine «VBScript»

або в російськомовній версії Windows:

Помилка CScript: Неможливо знайти виконуючого ядра «VBScript» для сценарію

В першу чергу варто перевірити наявність файлу cscript.exe у каталозі % Windir% \ system32 (Зазвичай це c: \ Windows \ system32 \)

Далі потрібно спробувати перереєструвати бібліотеку vbscript.dll, виконавши в командному рядку (з правами адміністратора)

regsvr32 / s% SystemRoot% \ System32 \ vbscript.dl

Якщо після перезавантаження проблема не зникне, спробуйте в командному рядку виконати наступні команди (перереєстрували все бібліотеки, необхідні для роботи скриптів Visual Basic на комп'ютері):

regsvr32 atl.dll regsvr32 jscript.dll regsvr32 dispex.dll regsvr32 scrrun.dll regsvr32 scrobj.dll regsvr32 vbscript.dll regsvr32 msxml3.dll regsvr32 ole32.dll regsvr32 oleaut32.dll wscript / regserver

Досить часто проблема, пов'язана з неможливістю виконання vbs скриптів викликана некоректним видаленням антивіруса. Справа в тому, що деякі антивіруси при установці в систему змінюють в реєстрі ключ, який вказує на бібліотеку vbscript.dll, прописуючи замість нього свою бібліотеку. Тобто перед запуском будь-якого vbs скрипта спочатку його код перевіряє на безпеку спеціальний модуль антивірусу, і лише потім код передається на виконання бібліотеці vbscript.dll. Таким чином антивірус отримує контроль над виконанням всіх vbs скриптів на машині.

При коректному видаленні антивіруса значення ключа повинно повертатися на стандартне, але деякі антивіруси (часто цим грішив антивіруси McAfee, AVAST і продукти AVP Лабораторії Касперського) "забувають" це зробити, або проблему може створити сам користувач, некоректно видаливши антивірус (не стандартної uninstall - процедурою )

Наприклад, таке значення прийме цей ключ реєстру при установці на комп'ютері антивіруса McAfee.

C: \ Program Files \ Common Files \ McAfee \ SystemCore \ ScriptSn.20130508143011.dll

Щоб відновити початкові настройки, відкрийте редактор реєстру і перейдіть в розділ HKEY_CLASSES_ROOT \ CLSID \ B54F3741-5B07-11cf-A4B0-00AA004A55E8 \ InprocServer32. Ключ за замовчуванням (Default) не повинен бути порожнім або вказувати на відмінну від vbscript.dll бібліотеку. Якщо це не так, поміняйте його значення на шлях до бібліотеки vbscript.dll (За замовчуванням це C: \ Windows \ system32 \ vbscript.dll)

Порада. Якщо при спробі зберегти зміни в реєстр з'являється помилка доступу "Не вдається змінити ... Помилка під час запису нового значення параметра" або "Error Editing Value", потрібно надати свого облікового запису права на модифікацію даної гілки реєстру (ПКМ по гілці InprocServer32 -> Permission)

Можна просто зберегти наступний текст в файл з розширенням reg і імпортувати його до реєстру:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT \ CLSID \ B54F3741-5B07-11cf-A4B0-00AA004A55E8 \ InprocServer32]
@ = "C: \\ Windows \\ system32 \\ vbscript.dll»Порада. Все сказане вище відноситься і до гілки HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID \ B54F3741-5B07-11cf-A4B0-00AA004A55E8. У розділі InprocServer32 як значення за замовчуванням також має бути прописано C: \ Windows \ system32 \ vbscript.dll

Думаю, не дивлячись на все більшого поширення в маси сценаріїв на Powershell, більшість системних адміністраторів і розробників ПЗ ще довго не зможуть відмовитися від накопиченого багажу різних скриптів автоматизації на vbs, так що описана проблема і методи її рішення будуть актуальними ще довгий час.