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

PowerShell中foreach循环内无法访问含ß的对象属性

问题分析与解决

你遇到的核心问题是Import-Excel导入数据后,循环内无法正确识别带特殊字符(如ß)的属性名,但循环外可以直接访问——这大概率是因为Excel列名的Unicode规范化规则,和你在PowerShell中输入的字符串不一致导致的。

排查步骤

先确认循环内对象的真实属性名,在foreach循环里加一行代码打印所有属性名:

$Results = foreach ( $adress in $data  ) {
    # 打印当前对象的所有属性名,确认真实名称
    $adress.PSObject.Properties.Name | Write-Host
    Write-Output $adress."Straße"

    [pscustomobject]@{
        'Street'  = $adress."Straße"
      }
}

运行后你会发现,实际属性名可能不是你输入的Straße,而是被转换成了Strasse(ß被替换为ss,这是德语字符的一种常见规范化处理)。

解决方案

根据排查出的真实属性名调整访问方式:

  1. 如果真实属性名是Strasse,直接修改代码:
$Results = foreach ( $adress in $data  ) {
    [pscustomobject]@{
        'Street'  = $adress.Strasse  # 也可以用 $adress."Strasse"
      }
}
  1. 若不确定属性名的具体形式,可通过模糊匹配获取值:
$Results = foreach ( $adress in $data  ) {
    $streetValue = $adress.PSObject.Properties | 
        Where-Object { $_.Name -like '*Stra*' } | 
        Select-Object -First 1 -ExpandProperty Value
    [pscustomobject]@{
        'Street'  = $streetValue
      }
}

补充说明

Import-Excel模块处理非ASCII字符时,有时会根据系统区域设置或Excel内部的字符规范化规则自动转换字符,导致属性名和原始列名看起来不一致。通过查看对象的真实属性列表,就能快速定位问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:35:00