WScript — встроенный в Windows сервер сценариев (Windows Script Host), который запускает файлы .vbs и .js напрямую из командной строки, планировщика задач или двойного клика. Используется для автоматизации: управление файлами, реестром, запуск приложений, взаимодействие с COM-объектами.
- Синтаксис команды WScript
- Ключи и параметры
- Примеры использования
- Запуск VBScript-сценария через CScript
- Запуск программы через WScript.Shell
- Работа с файлами через FileSystemObject (JScript)
- Запись в реестр
- Ограничение времени выполнения
- Выполнение команды и получение вывода
- Передача аргументов сценарию
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- В чём разница между WScript и CScript?
- Как запустить WScript от имени администратора?
- Можно ли запустить PowerShell-скрипт через WScript?
- Как отключить WSH для всех пользователей через реестр?
- Поддерживает ли WScript Python или другие языки?
- Как передать переменные среды в сценарий?
Синтаксис команды 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").


