Действие: указывает 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).