From 6b5e2ebbd8e5fa0c4c581670ede0eb6e987591ad Mon Sep 17 00:00:00 2001 From: Patrick Canterino Date: Thu, 8 Mar 2018 21:24:36 +0100 Subject: [PATCH] Allow to rotate log files --- TODO.md | 2 +- dsmonrot.ps1 | 28 +++++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/TODO.md b/TODO.md index b725eeb..28bbea6 100644 --- a/TODO.md +++ b/TODO.md @@ -5,7 +5,7 @@ - [x] ~~Check if the network drive already exists before connecting~~ ⇒ `New-PSDrive` throws an exception if drive is already connected - [x] Create a log file for the script - [x] Clean up the messages sent to the console or send them to the debug or error streams (e.g. `Write-Debug` or `Write-Error`) -- [ ] Rotate log files +- [x] Rotate log files - [x] Suppress output of some commands - [ ] Add some comments to the source code - [ ] Allow multiple backups for a day \ No newline at end of file diff --git a/dsmonrot.ps1 b/dsmonrot.ps1 index 95508a1..43f3fda 100644 --- a/dsmonrot.ps1 +++ b/dsmonrot.ps1 @@ -36,8 +36,9 @@ # Every month a new log file is created [String]$logDir = "C:\Users\Patrick\Desktop\DSMonRot\log" # Keep log files for this amount of months (excluding the current month), -# 0 for indefinite (currently not available) -[Int32]$keepLogs = 1 +# 0 or less for indefinite (currently not available) +# You should set this to at least the same as $keepMonths +[Int32]$keepLogs = 2 # Map network share to this drive letter, comment out if you don't want to use it [String]$smbDrive = "Z" @@ -227,6 +228,26 @@ function Rotate-Backup { } } +function Rotate-Log { + if($keepLogs -le 0) { + return + } + + $keepLogsCount = $keepLogs + + Get-ChildItem $logDir -File | Where-Object {($_.Name -ne "$currMonth.log") -and ($_.Name -match "^\d{4,}-\d{2}\.log$")} | Sort-Object -Descending | + Foreach-Object { + if($keepLogsCount -ge 0) { + $keepLogsCount-- + } + + if($keepLogsCount -eq -1) { + Write-Log "Deleting log file $($_.FullName)" -Path $logFile -Level Info + Remove-Item -Force $_.FullName + } + } +} + $dsAdditionalArgs = @("--UseVSS") $errorMessages = @() @@ -239,7 +260,6 @@ $dsCommand = "" $currMonth = Get-Date -format "yyyy-MM" $currDay = Get-Date -format "yyyy-MM-dd" - if(!(Test-Path $logDir)) { try { New-Item -ItemType directory -Path $logDir -ErrorAction Stop | Out-Null @@ -398,6 +418,8 @@ if($errorMessages.Count -eq 0) { $errorMessages += "Could not disconnect network drive $smbDrive`: $_.Exception.Message" } } + + Rotate-Log } if($emailOnError -and $errorMessages.Count -gt 0) { -- 2.34.1