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

PowerShell中使用Add-Member带表达式赋值失败问题咨询

PowerShell中Add-Member无法求值表达式的原因及解决方法

问题根源

你用Select-Object的计算属性能正常工作,是因为它的E={$_.Name}是针对管道中每个对象执行的脚本块,$_会正确绑定到当前遍历的对象。

而Add-Member的-NotePropertyValue参数不支持脚本块——你写的$_.Name会在调用Add-Member之前就被求值,这个上下文里的$_根本不是数组里的对象(要么是null,要么是之前管道操作的残留值),所以最终每个对象的CopyName会被设为无效值,达不到预期效果。

正确实现方式

要给数组里的每个对象添加基于自身属性的成员,得用ForEach-Object遍历,在它的脚本块里操作,此时$_才会正确指代当前对象:

$testData | ForEach-Object {
    $_ | Add-Member -NotePropertyName "CopyName" -NotePropertyValue $_.Name
}
$testData

或者在PowerShell 5.1及以上(包括7),可以更直接地给属性赋值,写法更简洁:

$testData | ForEach-Object { $_.CopyName = $_.Name }

额外说明

  • 用Select-Object是生成新对象,不会改动原数组里的对象;而上面两种方法是直接修改原对象,这是两者的核心差异。
  • 处理数组对象时,一定要确保针对每个单独对象执行属性操作,否则无法正确绑定$_到目标对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:50:23