Действие: указывает IEHV, в файл какого типа экспортировать историю. Доступные опции аналогичны опциям диалогового окна «Сохранить» (Save) в графическом интерфейсе утилиты. Файл назначения: абсолютный или относительный путь и имя файла для сохранения экспортируемых данных. Тип источника и источник: дополнительные параметры для выбора другого пользователя (действуют аналогично опциям, показанным на рис. D).
На рис. I показаны неудачные эксперименты с опциями командной строки, а также простая команда для экспорта полной истории пользователя «TRTest» в файл таблицы, разделенной пробелами, «export.tab». Для простого просмотра истории интерфейс командной строки не подходит, но зато он очень удобен для составления отчетов и архивации.
Рисунок I. Командная строка
Сбор и архивация данных
В этом разделе я просто попытаюсь доказать свою концепцию, поэтому предложенные здесь решения ни в коем случае не стоит воспринимать как абсолютные и всеобъемлющие. Для примера я воспользуюсь языком VB.NET 2005.
Суть концепции заключается в записи данных во временный файл с помощью интерфейса командной строки и импорт этого файла в приложение VB.NET для сбора и архивации данных. Сложность состоит в том, что для каждого компьютера/учетной записи/папки, историю которых нужно архивировать, придется написать собственную команду.
Для команд Visual Basic существует лишь несколько опций. Можно было бы воспользоваться командой Shell(), но она выводит весьма ограниченное количество данных и к тому же славится своим капризным характером. В .NET Framework в пространстве имен System.Diagnostics есть класс Process, который, на мой взгляд, несколько надежнее в этом отношении, так что воспользуемся лучше им.
ПРИМЕЧАНИЕ: Подробнее об этом читайте в документации для System.Diagnostics.Process.
В классе Process, помимо всего прочего, есть опции для имени файла (File Name) и аргументов (Arguments). В нашем случае имя файла — это полный путь к исполняемому файлу IEHV, а аргументы мы позже заполним индивидуальным набором опций. Нужная нам команда выглядит так:
Эта команда экспортирует данные из указанной папки истории во временный текстовый файл таблицы, разделенной пробелами, в папке временных файлов пользователя. Для начала уберем iehv, потому что эта команда будет указана в свойствах опции «Имя файла» класса Process. Теперь воспользуемся .NET Framework, чтобы получить путь к папке временных файлов пользователя и заменить его на %temp%. Наконец, нужно написать код для вывода приглашения к указанию пути для импорта файла в выбранное приложение.
Это можно сделать разными способами — в зависимости от сложности выбранного приложения и от того, сколько папок требуется импортировать за один раз. Для иллюстрации нашей концепции предположим, что нам необходимо получить историю посещений для всех пользователей одного конкретного компьютера и загрузить эту информацию в класс DataTable, связанный с внутренней базой данных.
Код, показанный в листинге A, представляет собой фрагмент общего кода, предназначенного для получения данных из папки временных файлов пользователя, экспорта истории Internet Explorer из всех пользовательских каталогов и импорта ее в DataTable.
Листинг A
Dim strTempDir As String = _
Environment.GetEnvironmentVariable("temp", _ EnvironmentVariableTarget.User)
For Each strProfileDir As String In _
IO.Directory.GetDirectories("\" & Me.txtComputerName.Text & _
"c$documents and settings")
Dim strProfileDirParts As String() = strProfileDir.Split("\"c)
Dim strProfileName As String = _
strProfileDirParts(strProfileDirParts.Length - 1)
Me.psIEHV.StartInfo.Arguments = "/stab """ & strTempDir & _
"iehv.txt"" -folder ""\" & _
Me.txtComputerName.Text & _
"c$Documents and Settings\" & _
strProfileName & "Local SettingsHistory\"""
Me.psIEHV.Start()
Do While Me.psIEHV.HasExited = False
Loop
If Me.psIEHV.HasExited = True Then
Dim fs As New FileStream(strTempDir & "iehv.txt", _
FileMode.Open, FileAccess.Read)
Dim sr As New StreamReader(fs)
Dim strImport As String = sr.ReadToEnd()
For Each strEntry As String In _
strImport.Split(New String() {ControlChars.CrLf}, _
StringSplitOptions.RemoveEmptyEntries)
strEntry = strEntry.Substring(0, strEntry.Length - 1)
Dim strEntryParts As New List(Of String)
strEntryParts.Add(strComputer)
strEntryParts.AddRange(strEntry. _
Split(ControlChars.Tab))
Me.DsHistory.dtHistory.Rows.Add(strEntryParts. _
ToArray())
Next
sr.Close()
fs.Close()
sr = Nothing
fs = Nothing
End If
Next
Общие соображения
Утилита IEHistoryView позволяет администраторам быстро получить доступ к истории посещения сайтов для каждого пользователя, не требуя при этом сложной настройки и предварительной подготовки. Для расширенного архивирования можно использовать интерфейс командной строки в сочетании с собственным программным кодом, чтобы создать простой и недорогой (время — деньги) монитор для наблюдения за тем, какие сайты пользователи посещают в Интернете.
Стоит отметить, что наблюдать за посещением сайтов с помощью IEHV можно только в том случае, если пользователи не удаляют свой журнал посещений в Internet Explorer. К счастью, это можно предотвратить с помощью свойств групповой политики (Group Policy).