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

PowerShell读取CSV文件列值时无法获取正确结果如何解决

问题原因

你遇到的输出异常是PowerShell双引号变量展开规则导致的:双引号内默认仅展开变量本身,不会自动解析动态属性访问逻辑,$row.$col 在双引号中会被拆分为 $row 的字符串转写结果 + . + $col 的值,因此输出了@{...}.accountant这类不符合预期的内容。

注意:你提供的CSV示例存在两个小问题,建议先修正避免解析异常:

  1. 表头列名存在多余前后空格,会导致生成的属性名带空格,访问不便
  2. 第二行值的数量比表头多1个,末尾多余逗号会导致Import-Csv生成额外的空列
    修正后可直接使用标准格式CSV:
roles,admin,accountant,security
Engineer,,x,
修正方案

动态访问对象属性的正确写法为:双引号内使用子表达式$()包裹属性访问逻辑,强制PowerShell先计算表达式结果再插入字符串。

修正后完整代码

$path = "$PSScriptRoot\Test.csv"
$csv = Import-Csv -Path $path -Delimiter ","
# 可选:自动修剪所有列名的前后空白,兼容表头带空格的CSV
$csv | Get-Member -MemberType NoteProperty | ForEach-Object {
    $oldName = $_.Name
    $newName = $oldName.Trim()
    if ($oldName -ne $newName) {
        $csv | Rename-Item -MemberType NoteProperty -OldName $oldName -NewName $newName -Force
    }
}
$columns = $csv | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name

$csv | ForEach-Object {
    $row = $_
    foreach ($col in $columns) {
        Write-Host "value of column is : $col " 
        # 用子表达式包裹动态属性访问,正确读取单元格值
        Write-Host "value of cell is : $($row.$col) " 
        Start-Sleep -Seconds 10
    }
}
验证效果

执行上述代码后,遍历到accountant列时会正确输出对应的值x,其余任意列都可以正常读取对应单元格内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:06:06