WScript — запуск VBScript и JScript сценариев из командной строки

WScript (Windows Script Host) — встроенный сервер сценариев Windows для автоматизации задач через VBScript и JScript прямо из командной строки или по расписанию.

WScript — встроенный в Windows сервер сценариев (Windows Script Host), который запускает файлы .vbs и .js напрямую из командной строки, планировщика задач или двойного клика. Используется для автоматизации: управление файлами, реестром, запуск приложений, взаимодействие с COM-объектами.

Синтаксис команды WScript

WScript [//параметры] имя_сценария [аргументы_сценария]
CScript [//параметры] имя_сценария [аргументы_сценария]

WScript — графический режим (диалоги, окна). CScript — консольный режим (вывод в CMD). Оба принимают одинаковые ключи //.

Ключи и параметры

Ключ Описание Пример
//B Тихий режим: подавить все диалоги и сообщения об ошибках wscript //B script.vbs
//T:n Ограничить время выполнения сценария n секундами wscript //T:30 script.vbs
//E:движок Указать движок выполнения (VBScript, JScript и др.) wscript //E:VBScript script.txt
//Nologo Не показывать баннер при запуске через CScript cscript //Nologo script.vbs
//H:WScript Зарегистрировать WScript как обработчик по умолчанию для .vbs/.js wscript //H:WScript
//H:CScript Зарегистрировать CScript как обработчик по умолчанию wscript //H:CScript
//S Сохранить текущие параметры запуска как настройки по умолчанию cscript //Nologo //S
//D Включить отладчик (Active Script Debugger) wscript //D script.vbs
//X Запустить сценарий немедленно в отладчике wscript //X script.vbs
//Job:id Выполнить конкретный job из WSF-файла wscript //Job:Backup tasks.wsf

Примеры использования

Запуск VBScript-сценария через CScript

Консольный режим удобнее для скриптов, которые выводят текст: вывод идёт прямо в окно CMD, а не в MessageBox.

cscript //Nologo "C:\Scripts\cleanup.vbs"

Флаг //Nologo убирает заголовочный баннер Microsoft. Вывод через WScript.Echo появится в консоли как обычный текст.

Запуск программы через WScript.Shell

Сценарий запускает приложение и возвращает управление немедленно или ждёт завершения.

Set objShell = CreateObject("WScript.Shell")
objShell.Run "notepad.exe C:\temp\log.txt", 1, True

Третий параметр True заставляет сценарий дождаться закрытия Блокнота перед продолжением.

Работа с файлами через FileSystemObject (JScript)

Создание папки и перемещение файла — типичная задача автоматизации резервного копирования.

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateFolder("C:\\Backup");
fso.MoveFile("C:\\Logs\\app.log", "C:\\Backup\\app.log");

Если папка уже существует, CreateFolder выбросит ошибку — оберните в try/catch.

Запись в реестр

Автоматическая установка параметров при развёртывании ПО или настройке рабочих станций.

Set objShell = CreateObject("WScript.Shell")
objShell.RegWrite "HKCU\Software\MyApp\Setting", "1", "REG_SZ"

Поддерживаются типы REG_SZ, REG_DWORD, REG_BINARY, REG_EXPAND_SZ.

Ограничение времени выполнения

Важно для скриптов, запускаемых по расписанию: предотвращает зависание задачи.

wscript //T:60 //B "C:\Scripts\sync.vbs"

Если сценарий не завершится за 60 секунд, WScript принудительно остановит его.

Выполнение команды и получение вывода

Полезно, когда нужно разобрать вывод системной утилиты внутри сценария.

var objShell = new ActiveXObject("WScript.Shell");
var oExec = objShell.Exec("ipconfig /all");
var output = oExec.StdOut.ReadAll();
WScript.Echo(output);

Запускайте такой сценарий через cscript, иначе огромный MessageBox с результатом ipconfig потребует закрытия вручную.

Передача аргументов сценарию

Позволяет писать универсальные скрипты, где путь или имя передаётся снаружи.

cscript //Nologo process.vbs "C:\Data\file.csv" "output"

Внутри сценария аргументы читаются через WScript.Arguments(0), WScript.Arguments(1).

Частые ошибки и решения

Ошибка / симптом Причина Решение
«Отказано в доступе» при запуске .vbs двойным кликом Политика выполнения скриптов заблокирована через GPO или реестр Проверьте ключ HKLM\Software\Microsoft\Windows Script Host\Settings\Enabled — должен быть 1
WScript не является внутренней командой %SystemRoot%\System32 не в PATH, или WSH отключён Запускайте полным путём: C:\Windows\System32\wscript.exe
Сценарий выполняется, но вывод не виден Запуск через wscript вместо cscript — вывод идёт в MessageBox Замените wscript на cscript //Nologo для консольного вывода
«ActiveX component can’t create object» COM-объект не зарегистрирован или его нет в системе Проверьте регистрацию через regsvr32; убедитесь, что запускаете 32-/64-битный wscript под правильную версию
Скрипт не останавливается, завис Бесконечный цикл или ожидание внешнего процесса Используйте //T:n для таймаута; вызовите wscript.exe /pid через диспетчер задач

Когда применять, а когда нет

WScript подходит для автоматизации задач администрирования Windows: управление файлами, реестром, COM-объектами (Excel, Word, WMI). Оптимален в среде, где PowerShell недоступен или ограничен политиками. Не подходит для сложной обработки данных, сетевых операций или задач, требующих современных API — для этого используйте PowerShell (Invoke-Command, модули) или Python. WScript работает на всех версиях Windows, начиная с Windows 98, и не требует дополнительной установки. Запуск от имени администратора нужен только для операций с защищёнными ветками реестра или системными файлами.

FAQ

В чём разница между WScript и CScript?

WScript запускает сценарий в графическом режиме — диалоги и WScript.Echo показываются как окна. CScript выполняет тот же сценарий в консольном режиме, весь вывод идёт в CMD. Для автоматизации без вмешательства пользователя используйте cscript //B.

Как запустить WScript от имени администратора?

Откройте CMD от имени администратора и выполните cscript имя_сценария.vbs. Либо создайте ярлык для wscript.exe и установите флаг «Запускать от имени администратора» в свойствах ярлыка.

Можно ли запустить PowerShell-скрипт через WScript?

Напрямую нет. Но через WScript.Shell.Run можно запустить powershell.exe с нужным скриптом: objShell.Run "powershell -File C:\script.ps1".

Как отключить WSH для всех пользователей через реестр?

Установите HKLM\Software\Microsoft\Windows Script Host\Settings\Enabled = 0 (DWORD). После этого любой запуск .vbs или .js через WScript вернёт ошибку «Windows Script Host access is disabled».

Поддерживает ли WScript Python или другие языки?

Только языки, для которых установлен ActiveScript-движок. Стандартно — VBScript и JScript. Python, Perl, Ruby требуют отдельных движков (ActivePython и т.п.), которые больше не поддерживаются на современных версиях Windows.

Как передать переменные среды в сценарий?

Читайте их внутри сценария через WScript.Shell.ExpandEnvironmentStrings("%TEMP%") или напрямую через WScript.Shell.Environment("Process")("TEMP").

Оцените статью
( Пока оценок нет )
MW10
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.