Ошибка синтаксического анализатора журнала VBScripting

Пытался найти решение следующей проблемы:

  • Я создавал VBScript для получения серии событий аудита безопасности с помощью инструмента Windows LogParser 2.2.

  • Цель скрипта — анализировать журналы аудита из уже собранных и «сохраненных» evt(x) файлов внутри структуры папок еженедельного аудита. Представьте на мгновение, что вы имеете дело с целой сетью систем Windows, в которых уже запущена служба WMI, которая еженедельно собирает эти журналы для просмотра. Таким образом, структура папок остается постоянной из недели в неделю (например, /../audits/date/windows/XXX.evt).

  • Сводный файл для этих файлов еженедельного аудита основан на тексте, что не подходит для еженедельного аудита сотен машин.

  • Я понял базовый синтаксис, так что я могу получать события и выводить их в html с любыми проблемами. Моя борьба связана с добавлением дополнительных функций, которые мне нужны.

  • Скрипту необходимы следующие функции:

    1. при запуске он должен предложить пользователю ввести путь к файлу, из которого он хочет проанализировать данные аудита (например, ../2013-07-03/windows/*)

    2. Затем ответ пользователя должен быть привязан к значению и использоваться для замены переменной, которую я указываю во всем сценарии. Желаемый результат заключается в том, что сценарий инициирует события запроса в сценарии в указанном пользователем местоположении.

  • Я попытался использовать поле ввода с объектом регулярного выражения, и я не могу заставить скрипт пройти и заменить переменную (filePathReplace), чтобы скрипт запускал события запроса, где я указал.

Меня не волнует, используется ли поле ввода или нет. Больше всего мне просто нужен способ передать скрипту путь к файлу и применить его во всем скрипте, чтобы logparser запускал мои инструкции в этой конкретной папке.

Выдержка из того, что у меня есть, приведена ниже. Любая помощь приветствуется. Спасибо всем за ваше время.

ОТРЫВОК КОДА (это основные компоненты скрипта и одно из событий аудита)

Dim oLogQuery
Dim oEVTInputFormat
Dim oTPLOutputFormat 
Dim strQuery

Set oLogQuery = CreateObject("MSUtil.LogQuery")

' Create Input Format object
Set oEVTInputFormat = CreateObject("MSUtil.LogQuery.EventLogInputFormat")
oEVTInputFormat.direction = "BW"

' Create Output Format object
Set oTPLOutputFormat = CreateObject("MSUtil.LogQuery.TemplateOutputFormat")

' Create query text  (the variable substitution should occur where I state
' filePathReplace. To make the script run without this function, subsitiute
' that variable for 'Security'

' Audit log clearing - 517

oTPLOutputFormat.tpl = "C:\Program Files\Log Parser 2.2\EventFilters\EventLogs-TPL-517.tpl"

strQuery = "SELECT TimeGenerated, EventID, " & _
  "EXTRACT_TOKEN (Strings,3,'|') AS clientUserName, " & _
  "EXTRACT_TOKEN (Strings,4,'|') AS hostName, " & _
  "EXTRACT_TOKEN (Message,0,'Primary User Name') AS Message " & _ 
  "INTO 'C:\Program Files\Log Parser 2.2\EventFilters\AuditLogCleared-517.htm' " & _
  "FROM 'filePathReplace' " & _
  "WHERE EventID = 517"

oLogQuery.ExecuteBatch strQuery, oEVTInputFormat, oTPLOutputFormat

person James Harvey    schedule 04.07.2013    source источник


Ответы (1)


Метод Shell.BrowseForFolder, возможно, является лучшим решением вашей проблемы. Пример:

Set os = CreateObject("shell.application")
basedir = os.Namespace("C:\some\folder").Self.Path
Set fldr = os.BrowseForFolder(0, "Select Folder:", &h10&, basedir)
If Not fldr Is Nothing Then
  'do stuff
End If

Используйте возвращенный объект следующим образом:

strQuery = "SELECT ..." & _
  ...
  "FROM '" & fldr.Self.Path & "' " & _
  "WHERE EventID = 517"
person Ansgar Wiechers    schedule 04.07.2013
comment
Большое вам спасибо за вашу помощь! - person James Harvey; 05.07.2013
comment
Пожалуйста, не оставляйте комментарии с благодарностью. Правильный способ выразить благодарность на SO — это проголосовать и/или принять ответ. - person Ansgar Wiechers; 05.07.2013