如何在Powershell中更改PSCustomObject的数组

时间:2018-11-01 15:17:37

标签: powershell

我可以修改Array之类的PSCustomObject属性:

$a.b.c += "new item"

有可能用功能吗?我的意思是传递$a.b.c来起作用并对其进行修改。看来这并非微不足道(即使可能的话):我尝试了[ref],但没有成功。对我而言,唯一有效的方法是返回新值并进行赋值,但这涉及函数调用两侧的$a.b.c表达式,这会使行变长。我也尝试过:

function AddItem {
  Param(
      $Obj,
      $Value,
      [switch]$Uniq
  )
  $MutObj = [System.Collections.ArrayList]$Obj
  $MutObj.Add($Value) > $null
}

但是这也不起作用,似乎$a.b.c += x实际上是change property "c" of $a.b object,而我在函数作用域中还没有$a.b。即使在体内进行功能和修改后,它也可以实现吗?

1 个答案:

答案 0 :(得分:2)

我认为您要问的是为什么对象在功能上没有变化。

Powershell将函数变量作为值处理,这意味着它会创建一个与传入的变量完全相同的变量,并在函数范围内对其进行更改。您要做的是通过引用进行此操作,这意味着它将与传递给函数的同一对象混在一起。这可以通过将[Ref]类型添加到传递给参数的值中来完成。在此示例中,executePendingBindings()

完整脚本

Additem -Object ([ref]$JSON) -Value "TEST"