# heartbeat-signed.ps1 — site1.erralert.com HMAC-signed check-in. $Url = "YOUR_URL/heartbeat" $Secret = "YOUR_SECRET" $Body = (@{ hostname = $env:COMPUTERNAME }) | ConvertTo-Json -Compress $Ts = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds().ToString() $Hmac = New-Object System.Security.Cryptography.HMACSHA256 $Hmac.Key = [Text.Encoding]::UTF8.GetBytes($Secret) $Signature = ($Hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes("$Ts`n$Body")) ` | ForEach-Object { $_.ToString("x2") }) -join "" try { Invoke-RestMethod -Uri $Url -Method Post -Body $Body ` -ContentType "application/json" -TimeoutSec 15 ` -Headers @{ "X-Timestamp" = $Ts; "X-Signature" = $Signature } | Out-Null exit 0 } catch { Write-Error $_ exit 1 }