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,这是德语字符的一种常见规范化处理)。
解决方案
根据排查出的真实属性名调整访问方式:
- 如果真实属性名是
Strasse,直接修改代码:
$Results = foreach ( $adress in $data ) { [pscustomobject]@{ 'Street' = $adress.Strasse # 也可以用 $adress."Strasse" } }
- 若不确定属性名的具体形式,可通过模糊匹配获取值:
$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
相关产品推荐
相关产品推荐

