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

PowerShell中如何将WMI查询的扩展坞版本与指定值对比?

解决PowerShell中HP扩展坞版本对比的类型不匹配问题

问题根源

你用Select FirmwarePackageVersion得到的是带属性的自定义对象(PSCustomObject),不是纯版本字符串,直接和预设版本对比自然会触发类型不匹配错误。另外直接用字符串对比版本也可能出现逻辑错误(比如"1.9"字符串会被判定为大于"1.18",但实际版本1.9 < 1.18)。

解决步骤

  1. 提取纯版本字符串:用Select-Object -ExpandProperty FirmwarePackageVersion代替单纯的Select FirmwarePackageVersion,直接获取版本值的字符串内容。
  2. 转换为Version类型:将字符串版本转为[version]对象,PowerShell的Version类型支持原生的大小对比,能正确处理版本号的层级逻辑。
  3. 添加异常处理:避免因无法读取扩展坞信息或版本格式异常导致脚本中断。

示例代码

# 遍历计算机列表时的处理逻辑($_ 代表当前计算机名)
$dockVersionStr = Get-CimInstance -class HP_DockAccessory -computername $_ -namespace root/HP/InstrumentedServices/v1 | Select-Object -ExpandProperty FirmwarePackageVersion

if ($dockVersionStr) {
    try {
        $currentVersion = [version]$dockVersionStr
        $targetVersion = [version]"1.18"
        
        if ($currentVersion -lt $targetVersion) {
            Write-Host "[$_] 扩展坞固件版本 $currentVersion 低于1.18,请下载固件更新程序"
        } else {
            Write-Host "[$_] 扩展坞固件版本 $currentVersion 符合要求"
        }
    }
    catch {
        Write-Warning "[$_] 无法解析扩展坞版本:$dockVersionStr"
    }
}
else {
    Write-Warning "[$_] 未检测到HP扩展坞设备"
}

额外建议

  • 优先使用Get-CimInstance替代Get-WmiObject:后者已被PowerShell标记为过时,CIM cmdlets兼容性更强,支持更多现代特性。
  • 如果版本字符串格式非标准(比如带前缀/后缀),可以先做字符串清理(比如用-replace去掉非版本字符)再转换为Version类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:33:22