This is a script I found at "The Gallery" over at Technet.
Edward van Biljon created this for his own environment and I saw a great script to be used for my environment as well. In his version it also goes through the IIS folders, but I think there are better scripts available to do this so I don't use that function and commented it out in the script.
What it does is find log files, blg files and etl files.
If older than X days they get deleted.
Why would you want this? Well, disk space disk space disk space.
All the logging that Exchange 2013 and 2016 does out of the box will fill up your disks like crazy.
Running this as a scheduled task will prevent the most cases of system freezes and lockups because of full OS disks.
Certain files are in constant use by Exchange or IIS so this script won't be able to delete those files.
After a reboot you can delete those files by running this script.
The original script by Edward was missing some folders, so I added those:
$days=3 $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" $ETLLoggingPath3="C:\Program Files\Microsoft\Exchange Server\V15\FIP-FS\Data\ProgramLogArchive\" $ETLLoggingPath4="C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd\Connectivity" $HTTPERRLoggingPath="C:\Windows\System32\LogFiles\HTTPERR" 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 {$_.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" } } CleanLogfiles($IISLogPath) CleanLogfiles($ExchangeLoggingPath) CleanLogfiles($ETLLoggingPath) CleanLogfiles($ETLLoggingPath2) CleanLogfiles($ETLLoggingPath3) CleanLogfiles($ETLLoggingPath4) CleanLogfiles($HTTPERRLoggingPath)
Source
Hi! You have a big mistake in the script. You should use '$Files = $Targetfolder' and not '$Files = Get-ChildItem "C:\Program Files\...'
ReplyDeleteIt Always uses the same path and not the variable.
Fixed, thanks
Delete