set-praguri.ps1 schimba pragurile de oprire fara sa atinga parola SMTP si reporneste taskul, pentru ca ups-monitor.ps1 citeste configuratia o singura data, la pornirea buclei. trace-baterie.ps1 scrie o citire la fiecare 20 s intr-un CSV local, iar start-trace.ps1 il inregistreaza ca task programat sub SYSTEM. Local si detasat, pentru ca intr-o pana reala reteaua cade odata cu curentul daca switch-ul nu e pe UPS: sesiunea SSH devine oarba si emailurile esueaza, deci CSV-ul de pe server ramane singura sursa de date. Taskul are aceleasi AllowStartIfOnBatteries / DontStopIfGoingOnBatteries ca monitorul - fara ele Windows l-ar opri exact cand incepe ce vrem sa masuram. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RRyaDj39hPQ89SZS6URRpS
67 lines
2.2 KiB
PowerShell
67 lines
2.2 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Schimba pragurile de oprire din config.json fara sa atinga parola SMTP,
|
|
si reporneste monitorul ca sa le citeasca.
|
|
|
|
.DESCRIPTION
|
|
Se ruleaza PE SERVER, ridicat (Administrator).
|
|
|
|
Configuratia e citita o singura data, la pornirea buclei, deci orice modificare
|
|
cere repornirea taskului - de asta se ocupa scriptul.
|
|
|
|
Fara parametri, doar afiseaza pragurile curente.
|
|
|
|
.EXAMPLE
|
|
# praguri largite pentru un test de autonomie
|
|
powershell -ExecutionPolicy Bypass -File .\set-praguri.ps1 -Minute 60 -Procent 25
|
|
|
|
.EXAMPLE
|
|
# inapoi la valorile de productie
|
|
powershell -ExecutionPolicy Bypass -File .\set-praguri.ps1 -Minute 10 -Procent 35
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
[string]$InstallDir = 'C:\ROMFAST\ups-monitor',
|
|
[ValidateRange(1, 1440)][int]$Minute,
|
|
[ValidateRange(1, 99)][int]$Procent,
|
|
[switch]$FaraRepornire
|
|
)
|
|
|
|
Set-StrictMode -Version 2.0
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$path = Join-Path $InstallDir 'config.json'
|
|
$cfg = Get-Content -LiteralPath $path -Raw -Encoding UTF8 | ConvertFrom-Json
|
|
|
|
Write-Host ("Praguri curente : {0} min pe baterie / {1}% incarcare" -f `
|
|
$cfg.shutdownAfterMinutesOnBattery, $cfg.shutdownAtBatteryPercent)
|
|
|
|
if (-not $Minute -and -not $Procent) {
|
|
Write-Host 'Nimic de schimbat (da -Minute si/sau -Procent).'
|
|
return
|
|
}
|
|
|
|
if ($Minute) { $cfg.shutdownAfterMinutesOnBattery = $Minute }
|
|
if ($Procent) { $cfg.shutdownAtBatteryPercent = $Procent }
|
|
|
|
$cfg | ConvertTo-Json -Depth 5 | Set-Content -LiteralPath $path -Encoding UTF8
|
|
Write-Host ("Praguri noi : {0} min pe baterie / {1}% incarcare" -f `
|
|
$cfg.shutdownAfterMinutesOnBattery, $cfg.shutdownAtBatteryPercent)
|
|
|
|
if ($cfg.shutdownAtBatteryPercent -le 20) {
|
|
Write-Warning 'Pragul e sub cel al Windows-ului (20%): Windows va opri serverul primul, brutal, inaintea opririi curate.'
|
|
}
|
|
|
|
if ($FaraRepornire) {
|
|
Write-Warning 'Monitorul NU a fost repornit - inca ruleaza cu pragurile vechi.'
|
|
return
|
|
}
|
|
|
|
Stop-ScheduledTask -TaskName 'ROMFAST UPS Monitor'
|
|
Start-Sleep -Seconds 3
|
|
Start-ScheduledTask -TaskName 'ROMFAST UPS Monitor'
|
|
Start-Sleep -Seconds 18
|
|
|
|
$log = Join-Path $InstallDir ('log\ups-monitor-{0}.log' -f (Get-Date -Format 'yyyy-MM'))
|
|
Get-Content -LiteralPath $log -Tail 2 | ForEach-Object { " $_" }
|