You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KQL查询中字符串转Int失败问题求助

DHCP日志KQL字符串转Int为空的解决方法

问题根源分析

你的问题大概率是PowerShell生成的日志字符串中存在隐藏空白字符、非数字干扰字符,或是PercentageInUse字段的截取逻辑存在异常,导致KQL的类型转换函数无法识别有效数字。

分步解决方案

1. 先排查原始字符串的实际内容

在KQL中先检查字符串的字符编码,确认是否存在非数字干扰项:

// 替换为你的自定义日志表名
YourDHCPCustomLogTable
| project Free, unicode_scalars(Free)
| take 10

如果输出中包含非0-9的Unicode编码字符,说明需要先清理字符串。

2. 清理字符串后再执行类型转换

通过trim()去除前后空白,replace()过滤非数字字符,再执行类型转换:

YourDHCPCustomLogTable
| project 
    原始Free字段 = Free,
    清理后Free字段 = trim(" \t\n\r", Free),
    转换为Int = toint(replace(@"[^0-9]", "", trim(" \t\n\r", Free)))
| where isnotempty(转换为Int)

针对带小数点的PercentageInUse字段,需先用todouble()转换,再按需转Int:

YourDHCPCustomLogTable
| project 
    原始百分比 = PercentageInUse,
    清理后百分比 = trim(" \t\n\r", PercentageInUse),
    转换为Double = todouble(replace(@"[^0-9\.]", "", 清理后百分比)),
    转换为Int = toint(转换为Double)

3. 从源头优化日志生成(彻底避免问题)

当前PowerShell的字符串拼接逻辑存在风险:如果PercentageInUse是整数(如100),IndexOf(".")会返回-1,导致截取结果错误。建议改用CSV格式规范输出,Azure Monitor DCE可直接解析为结构化字段:

$DHCP_stats = Get-DhcpServerv4ScopeStatistics
$DHCP_stats | Select-Object `
    @{Name="LogTime"; Expression={(Get-Date).ToString("yyyy-MM-dd HH:mm:ss")}},
    @{Name="ScopeId"; Expression={$_.ScopeId.ToString()}},
    Free,
    InUse,
    @{Name="PercentageInUse"; Expression={[math]::Round($_.PercentageInUse, 1)}},
    Reserved |
Export-Csv -Path "C:\Logs\DHCP_Scope_Usage.csv" -Append -NoTypeInformation -Encoding utf8

4. 验证转换结果

转换后可通过以下语句确认类型和非空数据量:

YourDHCPCustomLogTable
| project 转换为Int, gettype(转换为Int)
| summarize 总记录数=count(), 有效转换数=countif(isnotempty(转换为Int))

内容的提问来源于stack exchange,提问作者poseyj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:31:06