1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| function Get-IoTEdgeDeviceStatus { [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$DeviceIPRange, [ValidateRange(1,65535)] [int]$PollingInterval = 300 )
$deviceReport = [PSCustomObject]@{ Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' OnlineDevices = @() OfflineDevices = @() AbnormalMetrics = @() }
$discoveredDevices = Test-Connection -ComputerName $DeviceIPRange -Count 1 -AsJob | Wait-Job | Receive-Job | Where-Object { $_.StatusCode -eq 0 } | Select-Object Address,ResponseTime
$discoveredDevices | ForEach-Object { try { $metrics = Invoke-RestMethod -Uri "http://$($_.Address)/metrics" -TimeoutSec 5 $deviceReport.OnlineDevices += [PSCustomObject]@{ IPAddress = $_.Address Latency = $_.ResponseTime CPUUsage = $metrics.cpu_usage MemoryUsage = $metrics.memory_usage }
if($metrics.cpu_usage -gt 90 -or $metrics.memory_usage -gt 85) { $deviceReport.AbnormalMetrics += [PSCustomObject]@{ IPAddress = $_.Address Metric = ($metrics | ConvertTo-Json) Threshold = "CPU >90% 或 Memory >85%" } } } catch { $deviceReport.OfflineDevices += $_.Address } }
$reportPath = "$env:TEMP/IoTEdgeReport_$(Get-Date -Format yyyyMMdd).html" $deviceReport | ConvertTo-Html -Title "IoT设备健康报告" | Out-File $reportPath return $deviceReport }
|