| | |
| | | Write-Host $line |
| | | } |
| | | |
| | | # ---------------------------------------------------------------- 取值转换 |
| | | # 厂商列可能为 NULL:直接强转 [double]/[int] 会抛异常、让整个通道从此不再推进。 |
| | | # 缺列一律转成 JSON null,后端把测量列的缺失当"设备没给",不写零代替缺失。 |
| | | function To-Text($value) { |
| | | if ($null -eq $value -or $value -is [System.DBNull]) { return $null } |
| | | return [string]$value |
| | | } |
| | | |
| | | function To-Int($value) { |
| | | if ($null -eq $value -or $value -is [System.DBNull]) { return $null } |
| | | return [int]$value |
| | | } |
| | | |
| | | function To-Num($value) { |
| | | if ($null -eq $value -or $value -is [System.DBNull]) { return $null } |
| | | return [double]$value |
| | | } |
| | | |
| | | # ---------------------------------------------------------------- 读取位置 |
| | | # 读取位置按「库里哪张表」记:"DB_<...>/Ws<N>_IV_0" -> 端点已确认的最后一条 record_time(FILETIME 刻度) |
| | | function Get-ReadPositions { |
| | |
| | | [void]$reader.GetValues($values) |
| | | [void]$rows.Add($values) |
| | | } |
| | | return $rows |
| | | # 必须用逗号包一层返回:函数返回集合时 PowerShell 会拆一层,只有一行结果时 |
| | | # 调用方 foreach 拿到的就不是"行"而是那一行的列值本身,$row[0] 会变成字符串首字符。 |
| | | return ,$rows |
| | | } |
| | | finally { $reader.Close() } |
| | | } |
| | |
| | | $tablesSeen = 0 |
| | | $emptyChannels = 0 |
| | | |
| | | foreach ($database in (Find-ActiveDatabases $connection)) { |
| | | $databases = Find-ActiveDatabases $connection |
| | | foreach ($database in $databases) { |
| | | foreach ($table in (Find-ChannelTables $connection $database)) { |
| | | if ($table -notmatch '^Ws(\d+)_IV_0$') { continue } |
| | | $channel = [int]$Matches[1] |
| | |
| | | Save-ReadPositions $positions |
| | | Write-Log (" 本轮扫过 {0} 张通道表 / {1} 个通道;其中 {2} 个通道没有新行,推送 {3} 行" -f ` |
| | | $tablesSeen, $seenChannels.Count, $emptyChannels, $sentRows) |
| | | if ($tablesSeen -eq 0) { |
| | | # 一张都没扫到通常是库列表不对(而不是这些库真的空):把库名念出来,便于现场判断 |
| | | Write-Log (" 提示:这些库里都没有 Ws*_IV_0 表 —— " + (($databases | Select-Object -First 8) -join ', ')) |
| | | } |
| | | return $sentRows |
| | | } |
| | | |