将DeviceTvmSoftwareInventory中字符串版本转为整数失败求助
解决DeviceTvmSoftwareInventory中软件版本字符串比较的问题
问题原因
OpenSSL的版本号(如1.1.1k、3.0.7)包含小数点和字母后缀,toint()仅能转换纯整数格式的字符串,因此直接转换后所有值为null。
解决方案1:使用parse_version()函数(推荐)
KQL提供了parse_version()函数,专门用于解析标准版本字符串并生成可直接比较的版本对象:
DeviceTvmSoftwareInventory | where SoftwareVendor == "openssl" | extend parsed_ver = parse_version(SoftwareVersion) | project DeviceId, DeviceName, SoftwareVendor, SoftwareVersion, parsed_ver | where parsed_ver < parse_version("1.1.1m") // 示例:筛选版本低于1.1.1m的设备
该函数支持带小数点、字母后缀的常见版本格式,解析后可直接使用<、>、==等运算符进行版本比较。
解决方案2:拆分版本字段手动比较
若环境不支持parse_version(),可通过parse运算符拆分版本号的各个部分为整数,按层级比较:
DeviceTvmSoftwareInventory | where SoftwareVendor == "openssl" | parse SoftwareVersion with major:int "." minor:int "." patch:int suffix:string // 根据实际版本格式调整拆分规则 | project DeviceId, DeviceName, SoftwareVendor, SoftwareVersion, major, minor, patch | where major < 1 or (major == 1 and minor < 1) or (major == 1 and minor == 1 and patch < 13) // 示例:筛选版本低于1.1.13的设备
如果版本号包含字母后缀(如1.1.1k),可额外添加逻辑将后缀转换为对应数字(如a=1、b=2...)后参与比较。
内容的提问来源于stack exchange,提问作者Sean Vucich
相关产品推荐
相关产品推荐

