]> git.p6c8.net - dsmonrot.git/commitdiff
Allow to rotate log files
authorPatrick Canterino <patrick@patrick-canterino.de>
Thu, 8 Mar 2018 20:24:36 +0000 (21:24 +0100)
committerPatrick Canterino <patrick@patrick-canterino.de>
Thu, 8 Mar 2018 20:24:36 +0000 (21:24 +0100)
TODO.md
dsmonrot.ps1

diff --git a/TODO.md b/TODO.md
index b725eeb1230c8b7c44a99da9782825ac9eca2c7b..28bbea68152d811a0c07773b652610ef64238d8e 100644 (file)
--- 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
index 95508a14fe2b0973cf4fa522eeeb251cd9fbf23e..43f3fdaf0cf3a0e70c89141b29de18f1c54909bd 100644 (file)
@@ -36,8 +36,9 @@
 # Every month a new log file is created\r
 [String]$logDir = "C:\Users\Patrick\Desktop\DSMonRot\log"\r
 # Keep log files for this amount of months (excluding the current month),\r
-# 0 for indefinite (currently not available)\r
-[Int32]$keepLogs = 1\r
+# 0 or less for indefinite (currently not available)\r
+# You should set this to at least the same as $keepMonths\r
+[Int32]$keepLogs = 2\r
 \r
 # Map network share to this drive letter, comment out if you don't want to use it\r
 [String]$smbDrive = "Z"\r
@@ -227,6 +228,26 @@ function Rotate-Backup {
        }\r
 }\r
 \r
+function Rotate-Log {\r
+       if($keepLogs -le 0) {\r
+               return\r
+       }\r
+       \r
+       $keepLogsCount = $keepLogs\r
+       \r
+       Get-ChildItem $logDir -File | Where-Object {($_.Name -ne "$currMonth.log") -and ($_.Name -match "^\d{4,}-\d{2}\.log$")} | Sort-Object -Descending |\r
+       Foreach-Object {\r
+               if($keepLogsCount -ge 0) {\r
+                       $keepLogsCount--\r
+               }\r
+               \r
+               if($keepLogsCount -eq -1) {\r
+                       Write-Log "Deleting log file $($_.FullName)" -Path $logFile -Level Info\r
+                       Remove-Item -Force $_.FullName\r
+               }\r
+       }\r
+}\r
+\r
 $dsAdditionalArgs = @("--UseVSS")\r
 \r
 $errorMessages = @()\r
@@ -239,7 +260,6 @@ $dsCommand = ""
 $currMonth = Get-Date -format "yyyy-MM"\r
 $currDay = Get-Date -format "yyyy-MM-dd"\r
 \r
-\r
 if(!(Test-Path $logDir)) {\r
        try {\r
                New-Item -ItemType directory -Path $logDir -ErrorAction Stop | Out-Null\r
@@ -398,6 +418,8 @@ if($errorMessages.Count -eq 0) {
                        $errorMessages +=  "Could not disconnect network drive $smbDrive`: $_.Exception.Message"\r
                }\r
        }\r
+       \r
+       Rotate-Log\r
 }\r
 \r
 if($emailOnError -and $errorMessages.Count -gt 0) {\r

patrick-canterino.de