====== Nettoyage des logs Exchange ======
===== Truncate DB logs =====
Diskshadow
Add volume d:
REM (optional, add one line for each additional drive to include) Add volume X:
Begin Backup
Create
End Backup
===== Fichiers de journalisation =====
Sur les serveur Exchange, il n'y a pas de purge automatique des logs. Il est nécessaire de le faire manuellement de façon périodique.
Nous proposons le script suivant :
# Cleanup logs older than the set of days in numbers
$days = 30
# Path of the logs that you like to cleanup
$IISLogPath = "C:\inetpub\logs\LogFiles\"
$ExchangeLoggingPath = "C:\Program Files\Microsoft\Exchange Server\V15\Logging\"
$ETLLoggingPath = "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\"
$ETLLoggingPath2 = "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs\"
Function CleanLogfiles($TargetFolder) {
Write-Host -Debug -ForegroundColor Yellow -BackgroundColor Cyan $TargetFolder
if (Test-Path $TargetFolder) {
$Now = Get-Date
$LastWrite = $Now.AddDays(-$days)
$Files = Get-ChildItem $TargetFolder -Recurse | Where-Object { $_.Name -like "*.log" -or $_.Name -like "*.blg" -or $_.Name -like "*.etl" } | Where-Object { $_.lastWriteTime -le "$lastwrite" } | Select-Object FullName
foreach ($File in $Files) {
$FullFileName = $File.FullName
Write-Host "Deleting file $FullFileName" -ForegroundColor "yellow";
Remove-Item $FullFileName -ErrorAction SilentlyContinue | out-null
}
}
Else {
Write-Host "The folder $TargetFolder doesn't exist! Check the folder path!" -ForegroundColor "red"
}
}
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
Start-Process powershell.exe "-File",('"{0}"' -f $MyInvocation.MyCommand.Path),"-ConfFile ",('"{0}"' -f $ConfFile) -Verb RunAs
}Else{
Write-Verbose "I AM (Ps>)ROOT"
#gci ‘C:\Program Files\Microsoft\Exchange Server\V15\Logging’ -Directory | gci -Include ‘*.log’,’*.blg’ -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-7) | Remove-Item -Recurse -Force -Confirm:$false
#gci ‘C:\Inetpub\logs’ -Directory | gci -Include ‘*.log’,’*.blg’ -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-14) | Remove-Item -Recurse -Force -Confirm:$false
CleanLogfiles($IISLogPath)
CleanLogfiles($ExchangeLoggingPath)
CleanLogfiles($ETLLoggingPath)
CleanLogfiles($ETLLoggingPath2)
}
Les dossiers à nettoyer étant ''C:\Program Files\Microsoft\Exchange Server\V15\Logging'' pour les logs purement Exchange et ''C:\Inetpub\logs'' pour les logs IIS, notamment ceux du webmail.
Pour nettoyer les logs, il faut des privilèges administrateur. Les dossiers de logs ne sont pas accessible sans élévation de privilège.
===== Tache planifié =====
Il est possible de planifier le nettoyage avec des taches planifiés, exécuté en tant qu'utilisateur Système. Voilà un script d'installation pour les tâches planifiés. Ces commandes doivent être exécuté en administrateur. Vous pouvez faire un clique droit sur le menu démarrer pour ouvrir un powershell en administrateur ou bien taper "powershell" puis cliquer sur "Executer en tant qu'administrateur".
Une fois dans la fenêtre PowerShell, vous pouvez copier / coller l'ensemble des commandes ci-dessous.
Import-Module ScheduledTasks
$A = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "gci 'C:\Program Files\Microsoft\Exchange Server\V15\Logging' -Directory | gci -Include '*.log','*.blg' -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-7) | Remove-Item -Recurse -Force -Confirm:$false"
$T = New-ScheduledTaskTrigger -Daily -At 9pm
$P = New-ScheduledTaskPrincipal "NT AUTHORITY\SYSTEM" -RunLevel Highest -LogonType ServiceAccount
$S = New-ScheduledTaskSettingsSet
$D = New-ScheduledTask -Action $A -Principal $P -Trigger $T -Settings $S -Description "Cleanup Exchange logs"
Register-ScheduledTask -TaskName "EXCH Purge exchange logs" -InputObject $D
$A = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "gci 'C:\Inetpub\logs' -Directory | gci -Include '*.log','*.blg' -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-14) | Remove-Item -Recurse -Force -Confirm:$false"
$T = New-ScheduledTaskTrigger -Daily -At 10pm
$D = New-ScheduledTask -Action $A -Principal $P -Trigger $T -Settings $S -Description "Cleanup IIS logs"
Register-ScheduledTask -TaskName "EXCH Purge IIS" -InputObject $D
Ces commandes vont créer deux tâches planifiés : ''EXCH Purge IIS'' et ''EXCH Purge exchange logs'' qui nettoieront les logs respectivement à 22h et 21h. Tous les logs de plus de 14 jours seront effacés.