Как создать VBScript?
VBScript — скриптовый язык программирования, который поддерживается операционными системами Microsoft Windows. С его помощью можно реализовать выполнение самых разных задач, от администрирования компьютера, до автоматизации пользовательских действий. Несомненным плюсом VBScript является тот факт, что для его работы не требуется установка каких-либо программ или обновлений — интерпретатор встроен в Windows по умолчанию (за исключением Windows 95, Windows NT 4.0 и Windows CE 3.0).
Давайте же разберем, как создать VBScript файл и как с его помощью можно выполнить простейшие операции.
Создание простого VBScript файла
Открываем Блокнот, и пишем туда следующее:
Нажимаем на меню Файл — Сохранить как, и в самом низу выбираем кодировку — ANSI. Затем, выбираем любое удобное место для сохранения, и сохраняем данный файл с именем helloworld.vbs .

Теперь, можно попробовать запустить двойным щелчком получившийся файл — в результате должно появится окно с надписью «Привет мир!».

Вот таким образом был создан простой VBScript файл. Если же, вы получили совсем не то, что должно было быть — переходим к следующему разделу данной статьи.
Возможные проблемы
При запуске VBScript файла открывается Блокнот
Если при двойном щелчке по ранее созданному вами файлу, у вас открывается Блокнот, убедитесь, что вы сохраняете файл с расширением .vbs в конце названия файла.
Текст отображается крякозябрами
Если при запуске созданного VBScript файла вы получили примерно следующее:

То проверьте, что при сохранении файла, вы установили значение «Кодировка» равное ANSI.
Как создать файл VBS (VBScript) ?
1) Вызываем контекстное меню (правой кнопкой мыши нажимаем по свободному месту папки или рабочего стола).
Создать -> Текстовый файл.
2) Открываем созданный файл и вставляем в него нужный код.
Пример:
3) Вызываем меню Файл -> Сохранить как.
4)
— выбираем место сохранения,
— в поле "Тип файла" выбираем пункт "Все файлы (*.*)",
— вводим нужное имя файла и дописываем после имени расширение .VBS
— нажимаем "Сохранить".
Работа с файлами в VBScript
Есть три способа создания пустого текстового файла (иногда называемого как «text stream»).
Первый способ — это использование метода CreateTextFile. В следующем примере показано, как создать текстовый файл, используя этот метод: Пример использования данного метода см. в разделе «3.7. Пример работы с объектом FileSystemObject».
Второй способ — это использование метода OpenTextFile объекта FileSystemObject с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод: Третий способ — это использование метода OpenAsTextStream с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод:
Добавление данных в файл
- Открыть текстовый файл
- Записать данные
- Закрыть файл
Для записи данных в текстовый файл используйте методы Write, WriteLine или WriteBlankLines объекта TextStream, в зависимости от задач, описанных в приведённой ниже таблице:
| Задача | Метод |
| Запись данных в текстовый файл без символа перехода на новую строку в конце | Write |
| Запись данных в текстовый файл с символом перехода на новую строку в конце | WriteLine |
| Запись одной или более пустых строк в открытый текстовый файл | WriteBlankLines |
Для закрытия текстового файла используйте метод Close объекта TextStream. Закрыть файл можно также методом Close объекта FileSystemObject. Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
ПРИМЕЧАНИЕ
Символ новой строки содержит символ или символы (зависит от операционной системы) для перевода курсора в начало новой строки (возврат каретки/перевод строки). Следует учитывать, что некоторые строки уже могут иметь в конце эти непечатаемые символы.
В следующем примере показано, как выполняется запись данных в открытый файл всеми тремя методами, затем файл закрывается:
Чтение файлов
Для чтения данных из файла используйте методы Read, ReadLine или ReadAll объекта TextStream. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:
| Задача | Метод |
| Чтение указанного количества символов из файла | Read |
| Чтение полной строки из файла (до символа конца строки, но не включая его) | ReadLine |
| Чтение всего содержимого файла | ReadAll |
Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
Если вы используете методы Read или ReadLine и хотите пропустить определённую часть данных, то используйте методы Scip или ScipLine. Полученный в результате работы этих методов текст может быть сохранён в строку, которую можно отобразить на экране в элементе управления, передать в качестве параметра в строковую функцию (например, в Left, Right или Mid), соединить с другой строкой и т.п.
В следующем примере показано, как открыть файл, записать в него данные, а затем прочитать их:
Перемещение, копирование и удаление файлов
Объектная модель FSO имеет для каждой из операций перемещения, копирования или удаления файлов по два метода. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:
| Задача | Метод |
| Перемещение файла | File.Move или FileSystemObject.MoveFile |
| Копирование файла | File.Copy или FileSystemObject.CopyFile |
| Удаление файла | File.Delete или FileSystemObject.DeleteFile |
Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
В следующем примере создаётся текстовый файл в корневом каталоге диска С, записывается в него некоторая информация. Затем файл перемещается в директорию с именем \tmp, копируется в директорию \temp, а затем удаляются копии из обеих директорий.
Для проверки работы этого примера создайте в корневом каталоге диска С директории tmp и temp.
Основы программирования в Microsoft Visual Basic Scripting
В данной статье поговорим о VBScript. Рассмотрим следующие вопросы: — что такое VBScript?; — кому это нужно и для чего?; — пример программ на VBScript; — сравнение VBScript и JavaScript.
Википедия говорит, что VBScript (Visual Basic Scripting Edition) – это скриптовый язык программирования, интерпретируемый компонентом Windows Script Host. Он широко используется при создании скриптов в операционных системах семейства Microsoft Windows. Если сказать немного проще, то VBScript – это файл с расширением vbs, который Windows воспринимается как набор инструкций. Формат этого файла – текст (*.txt). В общем, открываешь «Блокнот» и программируешь в свое удовольствие. Но может возникнуть вопрос: А кто (или что?) это все выполняет? — Ответ: сервер сценариев Windows, который ставится или обновляется вместе с Windows или с Internet Explorer.
Рассмотрим следующий вопрос, кому и для чего нужен VBScript? Ответ прост: на мой взгляд, это идеальная платформа для создания простых приложений для рутинных задач быстро и просто. Например, при каждой загрузке необходимо удалять какую-либо папку или файл, пожалуйста. Кроме этого, применяются в следующих областях, использующих продукцию Microsoft:
— автоматизация администрирования систем Windows;
— серверный программный код в страницах ASP;
— клиентские скрипты в браузере Internet Explorer.
В основном VBS-сценарии применяются для обработки данных, управления системой, работы с учетными записями пользователей и компьютеров, взаимодействия с офисными приложениями, работы с базами данными и прочих сложных задач.
Как вариант удобен для вирусописателя, как ни подло это звучит. Только при написании вирусов компиляция практически обязательна. Один из самых громких вирусов, I love you, был написан именно на VBScript, в общем, есть куда расти.
Для того, что бы программировать в среде VBScript, без компилятора, вам понадобится Notepad++, в блокноте проще, но лучше когда подсвечивается синтаксис, а также Internet Explorer, так как 80% функционала идет в комплекте с браузером. Для того, что бы программировать с компилятором, нужно установить Visual Basic Scripting Edition. VBS может запускаться в виде текстового файла, или компилированного текстового файла. В отличие от текстового файла, в котором будут видны команды, их можно редактировать, компилированный текстовый файл прочитать не удастся (сплошные крякозябры).
Скажем пару слов о спецификации. Описание всего, что поддерживает VBScript, займет много места. В принципе, не бойтесь экспериментировать, пишите код также, как и в VB, если что-то не пойдет, Вы об этом узнаете.
Все переменные здесь только Variant (может содержать данные любого типа.). Переменные задаются следующим образом:
Dim x – то, что хранит переменная VBScript сам разберется.
— Функции: Все функции Visual Basic.
Также как и в VB, константа вызывается, например так: vbNo.
Самая, на мой взгляд, приятная фича заключается в работе с FileSystemObject. Позволяет работать с файловой системой компьютера (удалять папки, писать в файлы и т.д.).
Теперь приведу пару примеров роботы с VBScript.
Напишем программу, которая будет суммировать два числа.
Для начала, создадим файл с именем sum.vbs в него запишем следующее:
Dim a,b,c ‘переменные для чисел
a = inputbox («Введите первое число»)
b = inputbox («Введите второе число»)
c = cint(a) + cint(b) ‘суммируем
msgbox («Результат: » & c) ‘вывод результата
Сохраняем, запускаем, получаем следующее (рисунок анимированный):
На первый взгляд все понятно, кроме одного: cint. Так как все переменные у нас Variant, а inputbox возвращает только строку как результат, то строка c = a + b будет интерпретирована как сложение двух строк, а не чисел, при вводе чисел 1 и 2 результат будет 12. Использование функции cint возвращает значение типа Integer, после этого складывает числа.
Рассмотрим программу для работы с файловой системой. Создаем файл FileSystem.vbs и запишем в него:
Dim fso, FolderName, FileName ‘переменные
‘создаем объект FileSystemObject в переменную fso
Set fso = CreateObject(«Scripting.FileSystemObject»)
FolderName = InputBox(«Имя папки?») ‘имя папки
FileName = InputBox(«Имя файла для создания?») ‘имя файла
fso.CreateFolder («c:\» & FolderName) ‘создадим папку
MsgBox «Создана папка: » & FolderName ‘сообщим пользователю
fso.CreateTextFile («c:\» & FolderName & «\» & FileName) ‘создадим файл
MsgBox «Создан файл: » & FileName ‘сообщим пользователю
Сохраняем, запускаем, получаем следующее (рисунок анимированный):
Теперь объясню более внятно. Во второй строке мы создали объект FileSystemObject в переменной fso. Потом вызвали метод CreateFolder для создания папки, указав в качестве аргумента путь к папке. Потом вызвали метод CreateTextFile для создания файла.
Теперь наполним текстовый файл информацией:
Dim fso, Text, FolderName, FileName ‘переменные
‘создаем объект FileSystemObject в переменную fso
Set fso = CreateObject(«Scripting.FileSystemObject»)
FolderName = InputBox(«Имя папки?») ‘имя папки
FileName = InputBox(«Имя файла для создания?») ‘имя файла
fso.CreateFolder («c:\» & FolderName) ‘создадим папку
MsgBox «Создана папка: » & FolderName ‘сообщим пользователю
Set Text = fso.CreateTextFile («c:\» & FolderName & «\» & FileName) ‘создадим файл
MsgBox «Создан файл: » & FileName ‘сообщим пользователю
Text.Write «Это»
Text.WriteLine » статья о VBScript»
Text.WriteBlankLines 2
Text.WriteLine «специально для ibm.at.ua»
Text.Close
Думаю, тут все понятно. Объяснять не будем.
Рассмотрим вариант программы посложнее. Нужно узнать спецификацию своего компьютера, то есть полные данные компьютера, которые будут собраны в один файл.
Создадим файл spec_report.vbs, в который запишем следующее:
[spoiler=Код программы:]
Const SILENT = False ‘тихий режим отключен, будет запрошено имя компьютера
‘Const SILENT = True ‘режим отчета о локальном компьютере без вывода диалогов
‘где сохранять отчет
Const DATA_DIR = «comp\» ‘локальный каталог + «\» в конце
‘Const DATA_DIR = «\\SRV\Invent\comp\» ‘сетевой ресурс + «\» в конце
‘прочее
Const TITLE = «Спецификация компьютера» ‘заголовок диалоговых окон
Const DATA_EXT = «.csv» ‘расширение файла отчета
Const HEAD_LINE = True ‘выводить заголовки в первой строке CSV-файла
‘не завершать скрипт аварийно
‘закомментировать на время отладки
On Error Resume Next
‘объект для доступа к файловой системе
Dim fso
Set fso = CreateObject(«Scripting.FileSystemObject»)
‘объект WMI
Dim wmio
‘файл отчета
Dim tf
‘узнать имя локального компьютера
Dim nwo, comp
Set nwo = CreateObject(«WScript.Network»)
comp = LCase(nwo.ComputerName)
‘запросить имя удаленного компьютера
If Not SILENT Then
comp = InputBox(«Введите имя компьютера:», TITLE, comp)
‘проверить доступность компьютера
If Unavailable(comp) Then
MsgBox «Компьютер недоступен:» & vbCrLf & comp, vbExclamation, TITLE
comp = «»
End If
End If
‘проводим инвентаризацию данных машины
If Len(comp) > 0 Then InventComp(comp)
‘если ошибка
If Len(Err.Description) > 0 Then _
If Not SILENT Then MsgBox comp & vbCrLf & «Ошибка:» & vbCrLf & Err.Description, vbExclamation, TITLE
‘инвентаризация данных компьютера, заданного сетевым именем или IP-адресом
‘сохранение отчета с указанным именем
Sub InventComp(compname)
‘некоторые WMI-классы поддерживаются не во всех версиях Windows
Dim build
build = BuildVersion()
‘файл отчета
Set tf = fso.CreateTextFile(DATA_DIR & compname & DATA_EXT, True)
‘первая строка — заголовки
If HEAD_LINE Then tf.WriteLine «Секция отчета;Параметр;Номер экземпляра;Значение»
‘дата проверки
tf.WriteLine «Компьютер;Дата проверки;1;» & Now
Log «Win32_ComputerSystemProduct», _
«UUID», «», _
«Компьютер», _
«UUID»
Log «Win32_ComputerSystem», _
«Name,Domain,PrimaryOwnerName,UserName,TotalPhysicalMemory», «», _
«Компьютер», _
«Сетевое имя,Домен,Владелец,Текущий пользователь,Объем памяти (Мб)»
Log «Win32_OperatingSystem», _
«Caption,Version,CSDVersion,Description,RegisteredUser,SerialNumber,Organization,InstallDate», «», _
«Операционная система», _
«Наименование,Версия,Обновление,Описание,Зарегистрированный пользователь,Серийный номер,Организация,Дата установки»
Log «Win32_BaseBoard», _
«Manufacturer,Product,Version,SerialNumber», «», _
«Материнская плата», _
«Производитель,Наименование,Версия,Серийный номер»
Log «Win32_BIOS», _
«Manufacturer,Name,SMBIOSBIOSVersion,SerialNumber», «», _
«BIOS», _
«Производитель,Наименование,Версия,Серийный номер»
‘не определяется Core 2 в XP SP2, см. http://support.microsoft.com/kb/953955
Log «Win32_Processor», _
«Name,Caption,CurrentClockSpeed,ExtClock,L2CacheSize,SocketDesignation,UniqueId», «», _
«Процессор», _
«Наименование,Описание,Частота (МГц),Частота FSB (МГц),Размер L2-кеша (кб),Разъем,UID»
Log «Win32_PhysicalMemory», _
«Capacity,Speed,DeviceLocator», «», _
«Модуль памяти», _
«Размер (Мб),Частота,Размещение»
‘пропускаются USB-диски
Log «Win32_DiskDrive», _
«Model,Size,InterfaceType», «InterfaceType <> ‘USB'», _
«Диск», _
«Наименование,Размер (Гб),Интерфейс»
‘только локальные диски
‘пропускаются USB-диски, размер которых обычно NULL
Log «Win32_LogicalDisk», _
«Name,FileSystem,Size,FreeSpace,VolumeSerialNumber», «DriveType = 3 AND Size IS NOT NULL», _
«Логический диск», _
«Наименование,Файловая система,Размер (Гб),Свободно (Гб),Серийный номер»
Log «Win32_CDROMDrive», _
«Name», «», _
«CD-привод», _
«Наименование»
‘только для XP/2003 и выше
‘пропускаются «двойники», имеющие в названии слово «Secondary»
If build >= 2600 Then
Log «Win32_VideoController», _
«Name,AdapterRAM,VideoProcessor,VideoModeDescription,DriverDate,DriverVersion», «NOT (Name LIKE ‘%Secondary’)», _
«Видеоконтроллер», _
«Наименование,Объем памяти (Мб),Видеопроцессор,Режим работы,Дата драйвера,Версия драйвера»
Else ‘для Windows 2000
Log «Win32_VideoController», _
«Name,AdapterRAM,VideoProcessor,VideoModeDescription,DriverDate,DriverVersion», «», _
«Видеоконтроллер», _
«Наименование,Объем памяти (Мб),Видеопроцессор,Режим работы,Дата драйвера,Версия драйвера»
End If
‘только для XP/2003 и выше
‘пропускаются отключенные сетевые адаптеры, в том числе минипорты
‘пропускаются виртуальные адаптеры VMware
If build >= 2600 Then
Log «Win32_NetworkAdapter», _
«Name,AdapterType,PermanentAddress,MACAddress», «NetConnectionStatus > 0 AND NOT (Name LIKE ‘VMware%’)», _
«Сетевой адаптер», _
«Наименование,Тип,IP-адрес,MAC-адрес»
Else ‘для Windows 2000
Log «Win32_NetworkAdapter», _
«Name,PermanentAddress,MACAddress», «», _
«Сетевой адаптер», _
«Наименование,IP-адрес,MAC-адрес»
End If
Log «Win32_SoundDevice», _
«Name», «», _
«Звуковое устройство», _
«Наименование»
Log «Win32_SCSIController», _
«Name», «», _
«SCSI контроллер», _
«Наименование»
‘только для XP/2003 и выше
‘пропускаются сетевые принтеры
‘условия «Local = True Or Network = False» недостаточно для принт-серверов, поэтому проверяется порт
If build >= 2600 Then
Log «Win32_Printer», _
«Name,PortName,ShareName», «(Local = True OR Network = False) AND (PortName LIKE ‘%USB%’ OR PortName LIKE ‘%LPT%’)», _
«Принтер», _
«Наименование,Порт,Сетевое имя»
End If
Log «Win32_PortConnector», _
«ExternalReferenceDesignator,InternalReferenceDesignator», «», _
«Разъем порта», _
«Внешний,Внутренний»
Log «Win32_Keyboard», _
«Name,Description», «», _
«Клавиатура», _
«Наименование,Описание»
Log «Win32_PointingDevice», _
«Name», «», _
«Мышь», _
«Наименование»
‘закрыть файл
tf.Close
If Not SILENT Then MsgBox «Отчет сохранен в файл:» & vbCrLf & DATA_DIR & compname & DATA_EXT, vbInformation, TITLE
‘составить WQL-запрос, выполнить и записать строку в CSV-файл
‘входные параметры:
‘from — класс WMI
‘sel — свойства WMI, через запятую
‘where — условие отбора или пустая строка
‘sect — соответствующая секция отчета
‘param — соответствующие параметры внутри секции отчета, через запятую
‘для отображения в кратных единицах, нужно их указать в скобках
Sub Log(from, sel, where, sect, param)
Const RETURN_IMMEDIATELY = 16
Const FORWARD_ONLY = 32
Dim query, cls, item, prop
query = «Select » & sel & » From » & from
If Len(where) > 0 Then query = query & » Where » & where
Set cls = wmio.ExecQuery(query,, RETURN_IMMEDIATELY + FORWARD_ONLY)
Dim props, names, num, value
props = Split(sel, «,»)
names = Split(param, «,»)
num = 1 ‘номер экземпляра
For Each item In cls
For i = 0 To UBound(props)
‘взять значение
Set prop = item.Properties_(props(i))
value = prop.Value
‘без проверки на Null возможнен вылет с ошибкой
If IsNull(value) Then
value = «»
‘если тип данных — массив, собрать в строку
ElseIf IsArray(value) Then
value = Join(value,»,»)
‘если указана кратная единица измерения, перевести значение
ElseIf Right(names(i), 4) = «(Мб)» Then
value = CStr(Round(value / 1024 ^ 2))
ElseIf Right(names(i), 4) = «(Гб)» Then
value = CStr(Round(value / 1024 ^ 3))
‘если тип данных — дата, преобразовать в читаемый вид
ElseIf prop.CIMType = 101 Then
value = ReadableDate(value)
End If
‘вывести в файл непустое значение, заменить спецсимвол «;»
value = Trim(Replace(value, «;», «_»))
If Len(value) > 0 Then tf.WriteLine sect & «;» & names(i) & «;» & num & «;» & value
‘перейти к следующему экземпляру
num = num + 1
Next ‘item
‘преобразование даты формата DMTF в читаемый вид (ДД.ММ.ГГГГ)
‘http://msdn.microsoft.com/en-us/library/aa389802.aspx
Function ReadableDate(str)
‘объект недоступен в Windows 2000, поэтому см. далее
‘ Dim dto
‘ Set dto = CreateObject(«WbemScripting.SWbemDateTime»)
‘ dto.Value = str
‘ ReadableDate = dto.GetVarDate(True)
ReadableDate = Mid(str, 7, 2) & «.» & Mid(str, 5, 2) & «.» & Left(str, 4)
End Function
‘узнать версию (билд) WMI-сервера
‘вернуть целое число
Function BuildVersion()
Dim cls, item
Set cls = wmio.ExecQuery(«Select BuildVersion From Win32_WMISetting»)
For Each item In cls
BuildVersion = CInt(Left(item.BuildVersion, 4))
Next
End Function
‘проверить доступность компьютера в сети
‘вернуть True, если адрес недоступен
Function Unavailable(addr)
Dim wmio, ping, p
Set wmio = GetObject(«WinMgmts:
Set ping = wmio.ExecQuery(«SELECT StatusCode FROM Win32_PingStatus WHERE Address = ‘» & addr & «‘»)
For Each p In ping
If IsNull(p.StatusCode) Then
Unavailable = True
Else
Unavailable = (p.StatusCode <> 0)
End If
Next
End Function
[/spoiler]
При запуске данного сценария, в ранее созданной папке comp появится отчет, который будет иметь имя <имя компьютера>.csv. Данные в нем хранятся в виде текста. Выдернуть их оттуда не очень удобно. Поэтому напишем еще один скрипт, для создания отчета.
Создадим файл с именем comp_report.vbs в который запишем следующее:
[spoiler=Код:]
‘== НАСТРОЙКИ
Const TITLE = «Спецификация компьютеров» ‘заголовок отчета и диалоговых окон
Const DATA_DIR = «comp\» ‘каталог для сохранения отчетов + «\» в конце
‘Const DATA_DIR = «\\SRV\Invent\comp\» ‘сетевой ресурс для сохранения отчетов + «\» в конце
Const DATA_EXT = «.csv» ‘расширение файлов с данными
Const HEAD_LINE = True ‘пропустить первую строку в файле CSV — заголовок
Const REPORT_FILE = «comp_report_%DATE%.htm» ‘имя файла для сохранения отчета
‘количество, порядок и названия столбцов отчета
‘значения должны соответствовать первым двум полям CSV файла!
Dim col(21) ‘<— не забыть проверить верхний индекс!
col(0) = «Компьютер;Сетевое имя»
col(1) = «Компьютер;UUID»
col(2) = «Компьютер;Текущий пользователь»
col(3) = «Операционная система;Наименование»
col(4) = «Операционная система;Обновление»
col(5) = «Материнская плата;Производитель»
col(6) = «Материнская плата;Наименование»
col(7) = «Процессор;Наименование»
col(8) = «Процессор;Частота (МГц)»
col(9) = «Компьютер;Объем памяти (Мб)»
col(10) = «Модуль памяти;Размер (Мб)»
col(11) = «Модуль памяти;Частота»
col(12) = «Диск;Наименование»
col(13) = «Диск;Размер (Гб)»
col(14) = «Диск;Интерфейс»
col(15) = «CD-привод;Наименование»
col(16) = «Видеоконтроллер;Наименование»
col(17) = «Видеоконтроллер;Объем памяти (Мб)»
col(18) = «Сетевой адаптер;Наименование»
col(19) = «Сетевой адаптер;MAC-адрес»
col(20) = «Звуковое устройство;Наименование»
col(21) = «Принтер;Наименование»
‘шапка и подвал отчета в формате XHTML
‘оформление настраивается через CSS внутри тега <style>
Dim header, footer
‘не завершать скрипт аварийно
On Error Resume Next
‘файл отчета
Dim fso, report
Set fso = CreateObject(«Scripting.FileSystemObject»)
report = Replace(REPORT_FILE, «%DATE%», Date)
Set rep = fso.CreateTextFile(report, True)
rep.Write header
‘прочитать все CSV-файлы
Dim dir, fc, f, row
Set dir = fso.GetFolder(DATA_DIR)
Set fc = dir.Files
For Each f in fc
If Right(f.Name, 4) = DATA_EXT Then row = ReadCSV(dir.Path & «\» & f.Name)
If Len(row) > 0 Then rep.WriteLine row
Next
‘закрыть файл отчета
rep.Write footer
rep.Close
MsgBox «Отчет сохранен в файл:» & vbCrLf & report, vbInformation, TITLE
‘определить индекс элемента массива по его значению
‘если значение не найдено, вернуть -1
Function IndexCol(s)
IndexCol = -1
Dim i
For i = 0 To UBound(col)
If col(i) = s Then
IndexCol = i
Exit For
End If
Next
End Function
‘извлечь данные из файла CSV
‘сформировать и вернуть строку таблицы в формате XHTML
‘в случае ошибки вернуть пустую строку
Function ReadCSV(fname)
Dim tf, s, a, k, i
Dim v()
ReDim v(UBound(col))
‘значение по умолчанию — «-»
For i = 0 To UBound(v)
v(i) = «-»
Next
Set tf = fso.OpenTextFile(fname)
If HEAD_LINE Then tf.ReadLine ‘пропустить первую строку
Do Until tf.AtEndOfStream
s = tf.ReadLine
a = Split(s, «;»)
k = a(0) & «;» & a(1)
i = IndexCol(k)
If i > -1 Then
If a(2) > 1 Then ‘несколько экземпляров разделяются «;»
v(i) = v(i) & «;» & a(3)
Else
v(i) = a(3)
End If
End If
Loop
tf.Close
‘несколько экземпляров оформить списком в формате XHTML
For i = 0 To UBound(v)
‘If InStr(v(i), «;») Then v(i) = Replace(v(i), «;», «<br />») ‘более удачный для экспорта вариант?
If InStr(v(i), «;») Then v(i) & Replace(v(i), «;», «</li><li>») & «</li></ul>»
Next
ReadCSV & Join(v, «</td><td>») & «</td></tr>»
End Function
[/spoiler]
После этих манипуляций, при запуске созданного сценария, будет формироваться отчет, который состоит из таблицы с данными машины. Файл отчета будет иметь имя <comp_report_dd_mm_yy>.htm.
Разберемся теперь, в чем отличия и схожести VBScript и JavaScript.
Общие черты у них присущи в следующем:
— оба языка легко выучить, создание программы не требует вложения больших денег;
— оба используются для расширения функционала страницы сайта;
— оба работают на клиентских машинах, уменьшают нагрузку на сервер;
— оба могут выполнять злонамеренные сценарии на машинах пользователя;
Теперь разберем отличия, которые очень существенны:
— JavaScript – для браузеров, является сценаримв по умолчанию, а VBScript должен быть определен как сценарий;
— JavaScript – является кросбраузерным, чего нельзя сказать о VBScript который работает только в Internet Explorer;
— JavaScript – чувствителен к регистру, VBScript – нет;
Как видно, различий не так много. JS поддерживает только функции, VBS и функции и процедуры (подпрограммы). Так что можете сделать выводы, тем, кто знает ява скрипт, будет легко освоить VBS, а тем кто не знает пока ни того не другого будет еще легче, поскольку переучиваться не придется.
Учиться лучше на примерах.