PowerShell导入CSV筛选数据时遇System.Int32类型转换错误求助
解决CSV导入后utilization列数值转换失败的问题
执行以下PowerShell命令筛选CSV中utilization列大于80的行时:
Import-Csv 'C:\temp\t\xxxx.csv' | Where-Object {[int]$_.utilization -gt 80}
出现两类错误:
- 无法将格式为
"17 %"的字符串转换为System.Int32,提示输入格式不正确 - 单独执行
$util = [int]$_.utilization时,提示无法将System.Object[]类型转为System.Int32
问题原因
- 第一类错误:utilization列的值是带百分号的字符串,直接强转整数会失败
- 第二类错误:
$_.utilization是对象数组,可能是CSV中存在重复列名,或该列单元格包含多值
解决方案
1. 处理带百分号的字符串
通过正则表达式提取字符串中的纯数字部分,再转换为数值类型:
Import-Csv 'C:\temp\t\xxxx.csv' | Where-Object { # 移除所有非数字字符,转为整数 $utilValue = [int]($_.utilization -replace '[^\d]', '') $utilValue -gt 80 }
如果数值包含小数(如"85.5 %"),可改为转换为double类型适配:
Import-Csv 'C:\temp\t\xxxx.csv' | Where-Object { $utilValue = [double]($_.utilization -replace '[^\d.]', '') $utilValue -gt 80 }
2. 处理Object数组类型的列
若$_.utilization是数组,可指定访问数组的第一个元素(根据实际数据调整索引):
Import-Csv 'C:\temp\t\xxxx.csv' | Where-Object { # 取数组第一个元素,清理后转整数 $utilStr = $_.utilization[0] -replace '[^\d]', '' [int]$utilStr -gt 80 }
同时建议检查CSV文件,确认是否存在重复的utilization列名,避免导入时自动转为数组。
内容的提问来源于stack exchange,提问作者scage007
相关产品推荐
相关产品推荐

