Exchange Server хранение логов в MySQL
01 декабря 2024 г.
Как известно Exchange Server хранит свои транспортные логи ограниченное количество по времени, из-за того что их периодически надо чистить.
Скрипт написан на PowerShell + подключена библиотека MySQL.
#подключение библиотеки MySql.Data.dll
[void][system.reflection.Assembly]::LoadFrom("C:\Distr\MySQL\MySql.Data.dll")
$date=get-Date -date (Get-Date).AddDays(-1) -uformat "%d-%m-%Y"
$filename = "ExchangeLogParseMySQLULGVP-" + $date + ".txt"
$mysql_server = "IP-MySQL-Server"
$mysql_user = "USERNAME"
$mysql_password = "PASSWORD"
$dbName = "Exchange-Servers"
$Connection = New-Object -TypeName MySql.Data.MySqlClient.MySqlConnection
$Connection.ConnectionString = "SERVER=$mysql_server;DATABASE=$dbName;UID=$mysql_user;PWD=$mysql_password;charset=utf8mb4"
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$startDateFormatted = get-Date -date (Get-Date).AddDays(-1).ToShortDateString() -uformat "%m/%d/%Y 00:00:01"
$endDateFormatted = get-Date -date (Get-Date).AddDays(-1).ToShortDateString() -uformat "%m/%d/%Y 23:59:59"
$lists = Get-TransportService | Get-MessageTrackingLog -Start "$startDateFormatted" -End "$endDateFormatted" -ResultSize Unlimited | Select @{Label='Timestamp';Expression={$_.timestamp.ToString("yyyy-MM-dd HH:mm:ss")}}, Sender, Recipients, MessageSubject, MessageId, TotalBytes, OriginalClientIp, EventId | Sort-Object -Property Timestamp
try
{
#формируем список
foreach ($search in $lists) {
$Timestamp = $search.Timestamp;
$Sender = $search.Sender;
$Recipients = $search.Recipients -replace "'", '';
$Subject = $search.MessageSubject -replace "'", '';
$SubjectFormat = "`"{0}`"" -f$Subject;
$Message = $search.MessageID;
$Total = $search.TotalBytes;
$ClientIp = $search.OriginalClientIp;
$Id = $search.EventId;
#записываем информацию в табдицу БД
$sql.CommandText = "INSERT INTO `TABLE NAME` (Timestamp,Sender,Recipients,MessageSubject,MessageId,TotalBytes,OriginalClientIp,EventId) VALUES ('$Timestamp','$Sender','$Recipients','$SubjectFormat','$Message','$Total','$ClientIp','$Id')"
$sql.ExecuteNonQuery() | Out-Null
}
}
catch
{
$_.Exception.Message | Out-File "D:\LogParse\$filename"
}
#Закрытие подключения
$Connection.Close()
Дамп БД выкладывать смысла не вижу по коду и так понятна структура таблиц.
Скрипт успешно проверен на Exchange Server 2016 и Exchange Server 2019.
Если вдруг у Вас возникнут сложности с настройкой резервного копирования, Вы всегда можете обратиться ко мне за консультацией.
Благодарность за статью 100 рублей.