ibi icon

logrotate.ps1

ibi | PRO | 12/29/15 10:17:47 AM UTC | 0 ⭐ | 1249 👁️ | Never ⏰ | []
PowerShell |

2.44 KB

|

None

|

0 👍

/

0 👎

# logrotate.ps1
# - renames and archives log files
# v1.15.1228 - (c) by ibi c/o flatbyte.com
#
# parameters are read from logrotate.csv in the same directory
#
# logrotate.csv looks like this:
## ServiceToStop,ServiceToStart,PathFileMask,RenameLog,ArchiveDir,DaysToKeep
## W3SVC,W3SVC,d:\logs\php-error.log,1,d:\logs\archive,3
## ,,v:\logs\rsFOZZIE*.log,0,d:\logs\archive,7
#
# ServiceToStop:
# which service should be stopped before processing log files? short name of service used by cmd.exe's "net stop"
# ServiceToStart:
# which service should be started after processing log files? short name of service used by cmd.exe's "net start"
# --- NOTE: service names for starting/stopping are independent, but script needs admin-rights to do so.
# PathFileMask:
# which file names are to be processed? wild card like "*" or "?" are ok.
# RenameLog:
# bool for renaming files: 1- rename, 0- don't rename. 
# --- CAUTION: if files are not moved and wild cards are used subsequent runs will rename them again!
# ArchiveDir
# path where archived files are moved. NOTE: path *must* exist.
# DaysToKeep
# number of days, older files will be processed/moved, i.e. "7"=archive files older than 7 days
 
Start-Transcript -path $env:temp\logrotate_$env:computername-$env:username.txt # adjust transcript-path at your will
Trap { write "hoppla! - $_"; continue } # trap should be enough, you can change script to try/catch/finally if you desire. :)
 
ipcsv .\logrotate.csv | % { # read csv file
    write "processing"$_.PathFileMask # dump the filemask we're processing
    # stop service (needs admin-rights)
    if (($_.ServiceToStop.trim()).length -gt 0) { spsv $_.ServiceToStop -force }
    # rename if param is set. adjust time format if you wish (uses .net time format)
    if ($_.RenameLog -eq 1) { gci $_.PathFileMask | % { ren $_.fullname $($_.basename+(get-date -f 'yyyyMMddHHmm')+($_.extension)) }}
    # archive if given date is less than last write time of file
    if ($_.DaysToKeep -ne 0) {
        $CompareDate = (get-date).adddays(-$_.DaysToKeep); # minus sign means date in the past (e.g. -7 days)
        $ArchiveDir = $_.ArchiveDir; # save pipeline object for further use, b/c gci will overwrite it
        gci $_.PathFileMask | where { $_.LastWriteTime -lt $CompareDate } | mv -destination $ArchiveDir -force
    }
    # start service (needs admin-rights)
    if (($_.ServiceToStart.trim()).length -gt 0) { sasv $_.ServiceToStart } 
}
Stop-Transcript

Comments