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

PowerShell向数组追加对象时所有值被覆盖的问题求助

问题原因

你遇到的问题是因为始终复用同一个对象实例。PowerShell中对象属于引用类型,$array += $object添加的是对象的引用而非副本。每次循环修改$object的属性时,数组里所有已添加的引用都会指向这个被修改的对象,最终导致所有元素都显示最后一次修改的值。

解决方案

有两种常用的修复方式:

方式1:每次循环创建新对象

在循环内部每次实例化新的对象,确保添加到数组的都是独立实例:

$array = @()
foreach ($i in $users.Users){
    if($i.UserName -like "JS*"){
        # 每次循环新建独立对象
        $object = [PSCustomObject]@{
            Username = $i.UserName
            Name = $i.Name
        }
        $array += $object
    }
}
$array

方式2:用管道高效构建数组(推荐)

+=操作数组会反复创建新数组,数据量大时效率低下。用管道结合筛选和选择可以更简洁高效地实现需求:

$array = $users.Users | Where-Object { $_.UserName -like "JS*" } | Select-Object Username, Name
$array
逻辑验证

你提供的迭代输出正好印证了引用问题:

  • 迭代1:数组仅包含1个对象引用,显示当前属性值
  • 迭代2:数组包含2个同一对象的引用,修改属性后两个元素同步变化
  • 迭代3:数组包含3个同一对象的引用,全部随最后一次修改同步更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:22:46