Логи службы DHCP Windows Server 2003 хранятся в папке C:\Windows\System32\DHCP в формате текстовых файлов с именами в формате DhcpSrvLog-Sat.log, где Sat - наименование дня. Соответственно, каждую неделю файлы затираются.
Для ежедневного копирования таких логов написан следующий небольшой скриптик, который:
Для ежедневного копирования таких логов написан следующий небольшой скриптик, который:
- необходимо запускать каждый день;
- копирует лог DHCP за вчерашний день в заданную папку в файл с именем формата dhcp-20110615.log
- по ходу копирования вырезает все лишнее из логов (описание кодов сообщений и заголовка).
- ##############################################################################
- #
- #
- # Граббер логов службы Windows DHCP
- # =================================
- #
- #
- # Производит копирование логов Windows DHCP за вчерашний день в папку с
- # бэкапами. При копировании производится удаление из логов ненужной
- # информации: описания кодов событий, заголовка и т.п.
- #
- # Для успешной работы по сбору логов DHCP необходимо запускать данный скрипт
- # ежедневно.
- #
- # Формат именования выходного файла: dhcp-20110615.log, где:
- # - 20110615 - указатель на дату исходного лога 15.06.2011.
- #
- #
- ##############################################################################
- #
- #
- # ПАРАМЕТРЫ ЗАПУСКА СКРИПТА
- # ----------------------------
- param([string]$outDir="", [switch]$force=$false, [switch]$help)
- function GetHelp {
- echo "
- ОПИСАНИЕ
- Копирование логов Windows DHCP за вчерашний день в папку с бэкапами.
- При копировании производится удаление из логов ненужной информации:
- описания кодов событий, заголовка и т.п.
- СИНТАКСИС
- .\DhcpLogGrabber.ps1 -outdir <string>
- [-force]
- [-help]
- ПАРАМЕТРЫ
- -outdir
- Папка для помещения логов.
- -force
- Если параметр указан, файл с логом будет скопирован в папку
- бэкапами, даже если там уже существует файл с таким именем.
- -help
- Вывод справки (этой). Дополнительную информацию ищите в теле скрипта."
- }
- if ($help) { GetHelp ; exit }
- #
- ##############################################################################
- #
- #
- # КОНФИГУРИРОВАНИЕ
- # -------------------
- # Папка с логами службы Windows DHCP.
- $logsDir = "c:\windows\system32\dhcp"
- #
- ##############################################################################
- if (-not $outDir)
- { echo "Не указана папка для помещения логов." ; GetHelp ; exit 1 }
- # Проверка наличия папки с логами.
- if (-not (Test-Path $logsDir))
- { echo "Папки ""$logsDir"" не существует" ; exit 1 }
- # DHCP хранит логи в файлах, именуемых в формате "DhcpSrvLog-Sat.log", где
- # Sat - наименование дня. Для преобразования номера дня в его наименование
- # используется данная матрица. Матрица составлена с учетом того, что при
- # форматировании параметром %u объектов типа DateTime, воскресенье является
- # нулевым днем, а суббота - 6-м.
- $dayNames = @('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')
- # Вчерашняя дата и вчерашний номер дня.
- $yesterday = (Get-Date).AddDays(-1)
- $yesterdayNo = [int]($yesterday | Get-Date -uformat "%u")
- $yesterdayT = $yesterday | Get-Date -uformat "%d.%m.%Y"
- # Получение необходимого пути к файлу с логом.
- $logFilePath = "$logsDir\DhcpSrvLog-$($dayNames[$yesterdayNo]).log"
- # Если файла с логом нет, скрипт завершает работу.
- if (-not (Test-Path $logFilePath))
- { echo "Лог за $yesterdayT отсутствует" ; exit }
- # Путь к выходному файлу.
- $outLogPath = "$outDir\dhcp-$($yesterday | Get-Date -uformat "%Y%m%d").log"
- if (-not (Test-Path $outDir))
- { New-Item $outDir -type directory | Out-Null }
- if (-not (Test-Path $outDir))
- { echo "Невозможно создать папку ""$outDir""" ; exit 1 }
- # Если не указан параметр -force и выходной файл существует, работа
- # скрипта завершается.
- if ((Test-Path $outLogPath) -and (-not $force))
- { echo "Лог за $yesterdayT уже присутствует в папке назначения. Для автоматической замены, запустите скрипт с параметром -force." ; exit }
- # Из лога считываются все строки, являющиеся непосредственно записями событий,
- # а не описаниями, и заносятся в выходной файл. Учитывая небольшой объем логов
- # DHCP сервера, подход с фильтром строк приемлем.
- Get-Content $logFilePath
- | ? { $_ -match "^(\d{2})," }
- | Out-File $outLogPath -encoding Unicode
- echo "Лог за $yesterdayT скопирован в $outLogPath"
Комментариев нет:
Отправить комментарий