diff --git a/Deploy-LoginMonitor.ps1 b/Deploy-LoginMonitor.ps1 index 071e13f..d73662e 100644 --- a/Deploy-LoginMonitor.ps1 +++ b/Deploy-LoginMonitor.ps1 @@ -630,6 +630,48 @@ function Ensure-RdpMonitorWinRmOperationalLogEnabled { return $false } +function Sync-RdpMonitorSettingsHeartbeatInterval { + param( + [string]$LocalSettings, + [int]$TargetSeconds = 14400 + ) + + if (-not (Test-Path -LiteralPath $LocalSettings)) { return $false } + + $c = Get-RdpMonitorSettingsRaw -Path $LocalSettings + if ([string]::IsNullOrWhiteSpace($c)) { return $false } + + if ($c -match '(?m)^\s*\$HeartbeatInterval\s*=\s*(\d+)') { + $current = [int]$Matches[1] + if ($current -eq $TargetSeconds) { return $false } + $bak = "$LocalSettings.bak.$(Get-Date -Format 'yyyyMMdd_HHmmss')" + Copy-Item -LiteralPath $LocalSettings -Destination $bak -Force + $newContent = [regex]::Replace( + $c, + '(?m)^(\s*\$HeartbeatInterval\s*=\s*)\d+', + "`${1}$TargetSeconds" + ) + Write-DeployLog "login_monitor.settings.ps1: HeartbeatInterval $current → $TargetSeconds с (резервная копия: $bak)" + } else { + $bak = "$LocalSettings.bak.$(Get-Date -Format 'yyyyMMdd_HHmmss')" + Copy-Item -LiteralPath $LocalSettings -Destination $bak -Force + $block = @( + '# --- Heartbeat SAC (agent.heartbeat): интервал в секундах; 14400 = 4 ч ---' + "`$HeartbeatInterval = $TargetSeconds" + ) -join "`r`n" + $insertBeforeInventory = '(?m)^\s*#\s*---\s*Инвентаризация железа' + if ($c -match $insertBeforeInventory) { + $newContent = [regex]::Replace($c, $insertBeforeInventory, ($block + "`r`n`r`n" + '$0'), 1) + } else { + $newContent = ($c.TrimEnd() + "`r`n`r`n" + $block + "`r`n") + } + Write-DeployLog "login_monitor.settings.ps1: добавлен `$HeartbeatInterval = $TargetSeconds (резервная копия: $bak)" + } + + [System.IO.File]::WriteAllText($LocalSettings, $newContent.TrimEnd() + "`r`n", $Utf8Bom) + return $true +} + function Invoke-RdpMonitorSettingsPostPatches { param([string]$LocalSettings) if (-not (Test-Path -LiteralPath $LocalSettings)) { return $false } @@ -1086,6 +1128,7 @@ try { if ($isScriptVersionUpgrade) { Sync-RdpMonitorUseSacFallbackMode -LocalSettings $settingsLocal | Out-Null + Sync-RdpMonitorSettingsHeartbeatInterval -LocalSettings $settingsLocal | Out-Null } $installArgs = @( diff --git a/Login_Monitor.ps1 b/Login_Monitor.ps1 index 467cd8b..e0c5ef3 100644 --- a/Login_Monitor.ps1 +++ b/Login_Monitor.ps1 @@ -89,7 +89,7 @@ $script:SkipLogDetailLimit = 15 # строки ниже, если правки «мелкие» и вы не хотите менять отображаемую версию в логах). # Рекомендация: при значимых релизах меняйте и $ScriptVersion, и version.txt одинаково; при только # исправлениях на шаре — достаточно поднять patch в version.txt (например 1.3.0.1). -$ScriptVersion = "2.0.25-SAC" +$ScriptVersion = "2.0.27-SAC" # Логи (все под InstallRoot) $LogFile = Join-Path $script:InstallRoot "Logs\login_monitor.log" @@ -101,7 +101,7 @@ $LogRotationMinute = 0 $MaxBackupDays = 31 # Heartbeat (файл; при отсутствии обновления > HeartbeatStaleAlertMultiplier × интервал — оповещение) -$HeartbeatInterval = 3600 +$HeartbeatInterval = 14400 # Инвентаризация железа/ПО для SAC (agent.inventory); интервал опроса, сек (12 ч). $InventoryIntervalSec = 43200 $GetInventory = 1 diff --git a/login_monitor.settings.example.ps1 b/login_monitor.settings.example.ps1 index d745ec5..aaed00f 100644 --- a/login_monitor.settings.example.ps1 +++ b/login_monitor.settings.example.ps1 @@ -45,6 +45,9 @@ $SacApiKey = 'sac_UkOsAT3UWiQS54KK5OJPBDCSucysQDrKFju28wmYiz8' # В settings.ps1 используйте 1/0 или $true/$false — не пишите голое false без $ $DailyReportEnabled = 1 +# --- Heartbeat SAC (agent.heartbeat): интервал в секундах; 14400 = 4 ч --- +$HeartbeatInterval = 14400 + # --- Инвентаризация железа/ПО для SAC (agent.inventory, раз в 12 ч) --- $GetInventory = $true diff --git a/version.txt b/version.txt index cb49cd1..da1893f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2.0.25-SAC +2.0.27-SAC