Статья размещена автором Бетке Сергей Сергеевич

PowerShell: Найдём файл журнала SMTP сервера

Каждый может явно указать в сценарии (скрипте) путь к файлу журнала (лога). Но ведь хочется создавать сценарии, которые будут способны работать и при иной конфигурации сервера (хотя бы – с журналами в другой папке). Так найдём сами файл журнала средствами powershell и WMI.

Задача крайне простая, предлагаю Вашему вниманию функцию:

function Get-SMTPlogFileName {
	<#
		.Synopsis
		    Вовращает полный путь к файлу журнала SMTP сервера.
		.Description
		    Вовращает полный путь к файлу журнала SMTP сервера.
		.Parameter logDate
            Дата, за которую мы пытаемся получить журнал указанного SMTP сервера.
		.Parameter SMTPServiceIndex
            Номер виртуального SMTP сервера, журнал которого мы пытаемся получить.
		.Example
            Поиск временных ошибок в журнале SMTP:
            Get-SMTPlogFileName -logDate (Get-Date).AddDays(-1)
   	#>
 
    param (
		[Parameter(
			Mandatory=$false,
			Position=0,
			ValueFromPipeline=$true,
			HelpMessage="Дата, за которую мы пытаемся получить журнал указанного SMTP сервера."
		)]
        [System.DateTime]$logDate = (Get-Date),
		[Parameter(
			Mandatory=$false,
			Position=1,
			ValueFromPipeline=$false,
			HelpMessage="Номер виртуального SMTP сервера, журнал которого мы пытаемся получить."
		)]
        [int]$SMTPServiceIndex = 1
    )
 
    # получим расположение каталога журналов smtp и "вычислим" имя файла журнала
    $SMTPServerSettings = Get-WmiObject `
        -namespace "root\MicrosoftIISv2" `
        -class IIsSmtpServerSetting `
        -filter ("Name='SmtpSvc/" + $SMTPServiceIndex + "'")
        
    # период ведения журнала должен быть установлен в 1 день. именно на это мы рассчитываем.
    # поэтому если настройки будут иные - будем ругаться
    if ($SMTPServerSettings.LogFilePeriod -ne 1) {
        throw new-object System.ApplicationException("Период ведения журнала SMTP сервера должен быть установлен в 1 день!");
    };

    # при определении имени файла журнала нам необходима информация о типе журнала
    # я не нашёл способ пока определить тип журнала. нам необходим w3c
    [string]$logPrefix = "ex";
    [string]$logSuffix = ".log";

    # throw new-object System.ApplicationException("Тип журнала SMTP сервера не поддерживается!")

    return $logName = "$($SMTPServerSettings.LogFileDirectory)\SMTPSVC${SMTPServiceIndex}\${LogPrefix}$($logDate.ToString("yyMMdd"))$LogSuffix";
}

На текущий момент есть недоработки:

  • не могу определить сценарием тип журнала (не нашёл сведений в метабазе и объекте WMI);
  • поддерживает только вариант, когда на каждый день создаётся новый журнал.

Буду Вам благодарен, если поможете исправить первый указанный недочёт – определить тип журнала (IIS, NCSA, W3C). Текущая версия модуля с данной функцией доступна в моём SVN хранилище, доступ на чтение — svn_sysadm, пароль — svn.

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка