<# .SYNOPSIS Verifica alerta "UPS-ul nu mai comunica", dezactivand temporar dispozitivul de baterie HID - echivalentul software al cablului USB scos din UPS. .DESCRIPTION Se ruleaza PE SERVER, ridicat (Administrator), cu monitorul deja pornit. Reactivarea dispozitivului e in blocul finally, ca sa nu ramana oprit daca pica sesiunea SSH sau se intrerupe scriptul. Testul e sigur cat timp serverul e pe retea: fara baterie vizibila, monitorul intra pe ramura de "comunicatie pierduta" si NU ia nicio decizie de oprire. Asteptarea implicita e calculata din config.json: commsLostPolls * pollSeconds, plus o marja. .EXAMPLE powershell -ExecutionPolicy Bypass -File .\test-comms-loss.ps1 #> [CmdletBinding()] param( [string]$InstallDir = 'C:\ROMFAST\ups-monitor', [int]$WaitSeconds = 0 ) Set-StrictMode -Version 2.0 $ErrorActionPreference = 'Stop' $dev = Get-PnpDevice -Class Battery -ErrorAction SilentlyContinue | Where-Object { $_.InstanceId -like 'HID\*' } | Select-Object -First 1 if (-not $dev) { throw 'Nu am gasit niciun dispozitiv de baterie HID - UPS-ul nu e vazut de Windows nici acum.' } Write-Host "Dispozitiv tinta: $($dev.FriendlyName) [$($dev.InstanceId)]" if ($WaitSeconds -le 0) { $cfg = Get-Content -LiteralPath (Join-Path $InstallDir 'config.json') -Raw -Encoding UTF8 | ConvertFrom-Json $WaitSeconds = ($cfg.commsLostPolls * $cfg.pollSeconds) + 45 } Write-Host "Astept $WaitSeconds secunde cat dispozitivul e oprit." try { Disable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false -ErrorAction Stop Start-Sleep -Seconds 3 $n = @(Get-CimInstance Win32_Battery -ErrorAction SilentlyContinue).Count Write-Host "dezactivat : $((Get-PnpDevice -InstanceId $dev.InstanceId).Status) | instante Win32_Battery = $n" Start-Sleep -Seconds $WaitSeconds } finally { Enable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false -ErrorAction SilentlyContinue Start-Sleep -Seconds 10 $n = @(Get-CimInstance Win32_Battery -ErrorAction SilentlyContinue).Count Write-Host "reactivat : $((Get-PnpDevice -InstanceId $dev.InstanceId).Status) | instante Win32_Battery = $n" if ($n -lt 1) { Write-Warning 'UPS-ul NU a revenit in Win32_Battery. Verifica Device Manager -> Batteries inainte de a pleca.' } } Start-Sleep -Seconds 45 Write-Host '' Write-Host '--- ultimele linii de log ---' Get-Content (Join-Path $InstallDir ('log\ups-monitor-{0}.log' -f (Get-Date -Format 'yyyy-MM'))) -Tail 12 Write-Host '' Write-Host 'Asteptat: o linie ALERT "UPS-ul nu mai este vazut de Windows", un email trimis,' Write-Host 'apoi "Comunicatia cu UPS-ul a revenit" si al doilea email.'