From e00513f05098f7932e0e238c505eeb68ce606c2c Mon Sep 17 00:00:00 2001 From: PTah Date: Wed, 3 Jun 2026 11:25:21 +1000 Subject: [PATCH] feat: deploy patch for MaxBackupDays default (2.0.13-SAC) Add deploy-time patch when login_monitor.settings.ps1 lacks MaxBackupDays, enable the setting in example, and remove duplicate default in Login_Monitor.ps1. Co-authored-by: Cursor --- Deploy-LoginMonitor.ps1 | 46 ++++++++++++++++++++++++++++++ Login_Monitor.ps1 | 3 +- login_monitor.settings.example.ps1 | 2 +- version.txt | 2 +- 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/Deploy-LoginMonitor.ps1 b/Deploy-LoginMonitor.ps1 index a33c727..19dd09e 100644 --- a/Deploy-LoginMonitor.ps1 +++ b/Deploy-LoginMonitor.ps1 @@ -634,9 +634,55 @@ function Invoke-RdpMonitorSettingsPostPatches { if (Sync-RdpMonitorSettingsExchangeNoisePatches -LocalSettings $LocalSettings) { $changed = $true } if (Repair-RdpMonitorSettingsWinRmLinesIfInvalid -LocalSettings $LocalSettings) { $changed = $true } if (Sync-RdpMonitorSettingsWinRmInboundBlock -LocalSettings $LocalSettings) { $changed = $true } + if (Sync-RdpMonitorSettingsMaxBackupDaysIfMissing -LocalSettings $LocalSettings) { $changed = $true } return $changed } +function Test-RdpMonitorSettingsNeedsMaxBackupDays { + param([string]$SettingsPath) + if (-not (Test-Path -LiteralPath $SettingsPath)) { return $false } + $c = Get-RdpMonitorSettingsRaw -Path $SettingsPath + if ([string]::IsNullOrWhiteSpace($c)) { return $true } + return ($c -notmatch '(?m)^\s*\$MaxBackupDays\s*=') +} + +function Sync-RdpMonitorSettingsMaxBackupDaysIfMissing { + param([string]$LocalSettings) + + if (-not (Test-RdpMonitorSettingsNeedsMaxBackupDays -SettingsPath $LocalSettings)) { + return $false + } + + $c = Get-RdpMonitorSettingsRaw -Path $LocalSettings + $block = @( + '# --- Ротация login_monitor.log и хранение бэкапов (Logs\Backup\LoginLog_*.bak) ---' + '# $LogRotationHour = 0' + '# $LogRotationMinute = 0' + '$MaxBackupDays = 31' + ) -join "`r`n" + + $bak = "$LocalSettings.bak.$(Get-Date -Format 'yyyyMMdd_HHmmss')" + if (Test-Path -LiteralPath $LocalSettings) { + Copy-Item -LiteralPath $LocalSettings -Destination $bak -Force + Write-DeployLog "Добавление `$MaxBackupDays в login_monitor.settings.ps1; резервная копия: $bak" + } else { + Write-DeployLog "Создание login_monitor.settings.ps1 с `$MaxBackupDays = 31" + } + + $insertBefore4740 = '(?m)^\s*#\s*---\s*Блокировка учётной записи AD' + if (-not [string]::IsNullOrWhiteSpace($c) -and $c -match $insertBefore4740) { + $newContent = [regex]::Replace($c, $insertBefore4740, ($block + "`r`n`r`n" + '$0'), 1) + } elseif (-not [string]::IsNullOrWhiteSpace($c)) { + $newContent = ($c.TrimEnd() + "`r`n`r`n" + $block + "`r`n") + } else { + $newContent = ($block + "`r`n") + } + + [System.IO.File]::WriteAllText($LocalSettings, $newContent.TrimEnd() + "`r`n", $Utf8Bom) + Write-DeployLog "login_monitor.settings.ps1: добавлен `$MaxBackupDays = 31" + return $true +} + function Update-RdpMonitorSettingsServerDisplayNameHintIfMissing { param([string]$LocalSettings) if (-not (Test-Path -LiteralPath $LocalSettings)) { return $false } diff --git a/Login_Monitor.ps1 b/Login_Monitor.ps1 index 437b950..82334f5 100644 --- a/Login_Monitor.ps1 +++ b/Login_Monitor.ps1 @@ -89,12 +89,11 @@ $script:SkipLogDetailLimit = 15 # строки ниже, если правки «мелкие» и вы не хотите менять отображаемую версию в логах). # Рекомендация: при значимых релизах меняйте и $ScriptVersion, и version.txt одинаково; при только # исправлениях на шаре — достаточно поднять patch в version.txt (например 1.3.0.1). -$ScriptVersion = "2.0.12-SAC" +$ScriptVersion = "2.0.13-SAC" # Логи (все под InstallRoot) $LogFile = Join-Path $script:InstallRoot "Logs\login_monitor.log" $LogBackupFolder = Join-Path $script:InstallRoot "Logs\Backup" -$MaxBackupDays = 31 # Ротация login_monitor.log (ежедневно в указанное локальное время) и срок хранения бэкапов LoginLog_*.bak $LogRotationHour = 0 diff --git a/login_monitor.settings.example.ps1 b/login_monitor.settings.example.ps1 index 42e94ed..213495b 100644 --- a/login_monitor.settings.example.ps1 +++ b/login_monitor.settings.example.ps1 @@ -64,7 +64,7 @@ ${Ignore4624-LT3-EmptyIP-Event} = $false # --- Ротация login_monitor.log и хранение бэкапов (Logs\Backup\LoginLog_*.bak) --- # $LogRotationHour = 0 # $LogRotationMinute = 0 -# $MaxBackupDays = 31 +$MaxBackupDays = 31 # --- Блокировка учётной записи AD (4740) + IP из IIS ActiveSync --- # Мониторинг включается только на КД с именем $LockoutMonitorDomainController. diff --git a/version.txt b/version.txt index e5c3e6c..08917ec 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2.0.12-SAC +2.0.13-SAC