В 2024 году Microsoft объявила о поэтапном прекращении поддержки ранее широко распространённого скриптового языка VBScript. Популярность VBS скриптов в сценариях автоматизации и управления системой долгое время обеспечивалось за счет простоты, легкости языка и открытости кода (синтаксис основан на Visual Basic), наличием встроенной в Windows среды выполнения и интерпретатора (через Windows Scripting Host), наличием большой библиотеки как предустановленных VBS скриптов в Windows, так и скриптов от техподдержки Microsoft и сторонних авторов.
Однако устаревшая архитектура, наличие большого количество уязвимостей и вредоносных сценариев использования VBScript привели к тому, что Microssoft более не рекомендует его использовать. Начиная с релизов Windows 11 24H2 и Windows Server 2025, язык сценариев VBScript переведен в статус deprecated и стал опциональной системной функцией (Feature on Demand). На данный момент компонент VBScript пока включен в Windows по умолчанию. Однако согласно дорожной карте, в релизах 2027 года компонент VBScript будет уже по-умолчанию отключен, после чего уже полностью удален из образа Windows.
Включить или отключить VBScript можно через панель Параметры. Перейдите в раздел Settings -> System -> Optional features -> View optional features. Компонент VBSCRIPT по умолчанию установлен в Windows. Здесь вы можете удалить его при необходимости.
Также можно проверить, установлен ли интерпретатор VBscript в Windows из командной строки PowerShell:
Get-WindowsCapability -Online -Name vbs*
Чтобы удалить его, выполните команду:
Remove-WindowsCapability -Online -Name "VBScript~~~~0.0.1.0"
Или через DISM:
DISM /Online /remove-Capability /CapabilityName:VBScript
Для установки компонента VBscript, выполните:
DISM /Online /Add-Capability /CapabilityName:VBScript
Или
Add-WindowsCapability -Online -Name "VBScript~~~~0.0.1.0"
Если интерпретатор VBScript отсутствует, у файлов с расширением VBS пропадут настроенные ассоциации, а при попытке запустить любой VBS скрипт из командной строки появится ошибка:
Program 'slmgr.vbs' failed to run: No application is associated with the specified file for this operation
Если вы попробуете запустить VBS скрипт через wscript.exe (графический режим) или cscript.exe (консольный режим):
wscript.exe c:\windows\system32\slmgr.vbs
Windows Script Host There is no script engine for file extension ".vbs".
Перед глобальным отключением VBScript в Windows, администраторам критически важно заранее исследоваться свои корпоративные среды на предмет задач, в которых все-еще используются VBS скрипты. Для аудита событий использования VBS кода на компьютерах можно использовать утилиту SYSMON.
Скачайте утилиту sysmon64.exe на компьютер и создайте следующий XML файл, который будет логировать загрузку библиотеки vbscript.dll:
<Sysmon schemaversion="4.50"> <EventFiltering> <!-- Отслеживание загрузки vbscript.dll --> <ImageLoad onmatch="include"> <ImageLoaded condition="contains">vbscript.dll</ImageLoaded> </ImageLoad> </EventFiltering> </Sysmon>
Сохраните эту конфигурацию в XML файл, а затем установите службу Sysmon и драйвер устройства, который будет отслеживать нужные вам события:
Sysmon64.exe -i sysmon_settings.xml
Sysmon64.exe -c sysmon_settings.xml
, чтобы обновить конфигурацию.Теперь при каждом запуске движка VBScript в журнале событий будет фиксироваться событие с Event ID 7 (Image loaded: rule: ImageLoad). Анализ таких событий в Event Viewer -> Applications and Services Logs -> Microsoft -> Windows -> Sysmon -> Operational позволяет определить активность использования VBScript на компьютере.
Также по журналу событий Sysmon можно найти какие конкретно файлы VBS скриптов запускались, кем и когда.
Следующий PowerShell скрипт позволить найти и отфильтровать события в журнале Event Viewer, в которых логируются информация о запуске файлов с расширением *.VBS (Event ID 1: Process Create (rule: ProcessCreate)):
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=1} | ForEach-Object {
$xml = [xml]$_.ToXml()
$processPath = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'Image'} | Select-Object -ExpandProperty '#text'
$commandLine = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'CommandLine'} | Select-Object -ExpandProperty '#text'
if ($commandLine -like '*.vbs*') {
[PSCustomObject]@{
TimeCreated = $_.TimeCreated
ProcessPath = $processPath
CommandLine = $commandLine
}
}
}
В этом примере я обнаружил несколько событий запуска VBS скриптов на компьютере.
Таким образом с помощью Sysmon можно настроить аудит всех событий использования VBScript на компьютерах организации (не нужно включать такой аудит сразу на все системах, ограничитесь тестовыми группами типовых устройств). После обнаружения используемых VBS скриптов, проанализируйте их целесообразность и возможность переноса их кода в PowerShell.
-
.vbs
(VBScript) -
.vba
(Visual Basic for Application) -
.wsf
(Windows Script File) -
.wsh
(WSH settings file)
В Windows до сих пор используется огромное количество скриптов VBScript. Например, утилиты активации Windows (slmgr.vbs), Office (ospp.vbs), скрипты для удаления Office (Offscrub), утилита для вывода системной информации на рабочий стол (Bginfo) и т.д. Microsoft пока не разработала замену всем этим инструментам, поэтому о скором полном отключении VBScript речь, конечно, пока не идет. Но администраторам нужно уже заранее начать готовиться к этому шагу.