<# .SYNOPSIS Testeaza ramura "pe baterie" fara sa scoti UPS-ul din priza: scrie SIMULARE.json, urmareste logul, apoi curata dupa el. .DESCRIPTION Se ruleaza PE SERVER, ridicat (Administrator), cu monitorul deja pornit. Implicit, oprirea e parcursa IN GOL: se trimit emailurile, se scriu in log toti pasii, dar nu se opreste nici Oracle, nici Windows. Asta valideaza tot lantul decizie -> alerta -> secventa, adica exact partea pe care o pana reala ar exercita-o. Ce NU acopera: faptul ca Windows chiar raporteaza trecerea pe baterie. Acela e deja dovedit de perechile de evenimente Kernel-Power 105 de la panele reale (10 iun, 13 mai, 5 mai 2026) - vezi docs/ups-server36-monitorizare.md. Simularea expira singura si e stearsa de monitor; scriptul o sterge oricum la final, inclusiv daca e intrerupt. .PARAMETER Percent Incarcarea raportata. Sub pragul shutdownAtBatteryPercent (implicit 35), declansarea vine dupa confirmPolls cicluri - adica in ~45 de secunde. .PARAMETER Minute Cat timp ramane activa simularea. .PARAMETER ConfirmReal Repetitia exacta 'DA-OPRESTE-SERVERUL' transforma testul intr-o repetitie REALA: Oracle chiar se opreste si Windows chiar se inchide. De folosit doar intr-o fereastra de mentenanta anuntata. .EXAMPLE # repetitie in gol - sigura oricand powershell -ExecutionPolicy Bypass -File .\test-battery.ps1 .EXAMPLE # doar trecerea pe baterie, fara sa se atinga pragul de oprire powershell -ExecutionPolicy Bypass -File .\test-battery.ps1 -Percent 80 -Minute 3 .EXAMPLE # repetitie REALA, in fereastra de mentenanta: opreste Oracle si serverul powershell -ExecutionPolicy Bypass -File .\test-battery.ps1 -ConfirmReal 'DA-OPRESTE-SERVERUL' #> [CmdletBinding()] param( [string]$InstallDir = 'C:\ROMFAST\ups-monitor', [ValidateRange(0, 100)][int]$Percent = 30, [ValidateRange(1, 60)][int]$Minute = 4, [string]$ConfirmReal ) Set-StrictMode -Version 2.0 $ErrorActionPreference = 'Stop' $simPath = Join-Path $InstallDir 'SIMULARE.json' $real = ($ConfirmReal -eq 'DA-OPRESTE-SERVERUL') if ($ConfirmReal -and -not $real) { throw "-ConfirmReal trebuie sa fie exact 'DA-OPRESTE-SERVERUL'. Am primit: '$ConfirmReal'" } if (Test-Path -LiteralPath (Join-Path $InstallDir 'DEZACTIVAT')) { Write-Warning 'Exista fisierul DEZACTIVAT: monitorul nu evalueaza nimic, deci testul nu va arata nimic.' } $cfg = Get-Content -LiteralPath (Join-Path $InstallDir 'config.json') -Raw -Encoding UTF8 | ConvertFrom-Json $expira = (Get-Date).AddMinutes($Minute) if ($real) { Write-Host '' Write-Host '*** REPETITIE REALA: Oracle SE VA OPRI si serverul SE VA INCHIDE. ***' -ForegroundColor Red Write-Host '' } else { Write-Host 'Repetitie in gol: emailuri si log da, oprire efectiva nu.' } Write-Host ("Simulez: pe baterie, incarcare $Percent%. Prag de oprire: {0}% sau {1} min." -f ` $cfg.shutdownAtBatteryPercent, $cfg.shutdownAfterMinutesOnBattery) Write-Host ("Simularea expira la {0:HH:mm:ss}." -f $expira) Write-Host '' $sim = [ordered]@{ onBattery = $true upsPresent = $true percent = $Percent runtimeSec = 600 dryRun = (-not $real) expira = $expira.ToString('o') } try { $sim | ConvertTo-Json | Set-Content -LiteralPath $simPath -Encoding UTF8 Write-Host "Scris $simPath" $log = Join-Path $InstallDir ('log\ups-monitor-{0}.log' -f (Get-Date -Format 'yyyy-MM')) $de = 0 if (Test-Path -LiteralPath $log) { $de = @(Get-Content -LiteralPath $log).Count } $pana = (Get-Date).AddMinutes($Minute) while ((Get-Date) -lt $pana) { Start-Sleep -Seconds 15 if (Test-Path -LiteralPath $log) { $linii = @(Get-Content -LiteralPath $log) if ($linii.Count -gt $de) { $linii[$de..($linii.Count - 1)] | ForEach-Object { " $_" } $de = $linii.Count } } if (-not (Test-Path -LiteralPath $simPath)) { Write-Host ' (simularea a expirat si a fost stearsa de monitor)' break } } } finally { Remove-Item -LiteralPath $simPath -Force -ErrorAction SilentlyContinue Write-Host '' Write-Host 'Simulare oprita, citirea reala e din nou activa.' Start-Sleep -Seconds 20 Write-Host '--- stare dupa test ---' & powershell -NoProfile -ExecutionPolicy Bypass -File (Join-Path $InstallDir 'ups-monitor.ps1') -Mode Status }