如何在Powershell中更改PSCustomObject的数组

如何在Powershell中更改PSCustomObject的数组,powershell,Powershell,我可以修改PSCustomObject属性,该属性类似于数组: $a.b.c += "new item" 有可能用函数来做吗?我的意思是将$a.b.c传递给函数并修改它。似乎这不是小事(如果可能的话):我尝试了[ref],但没有成功。对我来说,唯一有效的方法是返回新值并赋值,但这涉及函数调用两侧的$a.b.c表达式,这会使行变长。我也试过: function AddItem { Param( $Obj, $Value, [switch]$Uniq )

我可以修改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
实际上是
更改$a.b对象的属性“c”
,我在函数范围中没有
$a.b
。即使在功能上和身体上进行了适当的修改,它也可以实现吗?

我想你要问的是为什么物体在功能上没有变化

Powershell将函数变量作为值进行处理,这意味着它将创建另一个与传入的变量完全相同的变量,并在函数范围内对其进行更改。您要做的是通过引用来实现这一点,这意味着它将与传递到函数中的相同对象发生冲突。这是通过将[Ref]类型添加到传入参数的值中来完成的。在本例中,魔法在这里处理
Additem-Object([ref]$JSON)-Value“TEST”

全文

function AddItem {
  Param(
      $Object,
      $Value,
      [switch]$Uniq
  )
  $Object.Value += $Value
}

$JSON = '[["aaa", "bbb"], ["ccc", "ddd"]]' | ConvertFrom-Json 

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

"0  : $($JSON[0])"
"0  : $($JSON[1])"
"0  : $($JSON[2])"

我想你要问的是为什么这个对象在函数中没有变化

Powershell将函数变量作为值进行处理,这意味着它将创建另一个与传入的变量完全相同的变量,并在函数范围内对其进行更改。您要做的是通过引用来实现这一点,这意味着它将与传递到函数中的相同对象发生冲突。这是通过将[Ref]类型添加到传入参数的值中来完成的。在本例中,魔法在这里处理
Additem-Object([ref]$JSON)-Value“TEST”

全文

function AddItem {
  Param(
      $Object,
      $Value,
      [switch]$Uniq
  )
  $Object.Value += $Value
}

$JSON = '[["aaa", "bbb"], ["ccc", "ddd"]]' | ConvertFrom-Json 

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

"0  : $($JSON[0])"
"0  : $($JSON[1])"
"0  : $($JSON[2])"

你能告诉我PS自定义对象看起来像什么吗?它的解码JSON文件。我在类似于
[[“aaa”、“bbb”]、[“ccc”、“ddd”]
的属性上测试了此函数。像
AddItem$a.b.c 1
一样调用它,其中
$a.b.c
就是那些数组。我的意思是,你能发布使
PSCUSTOMObject
的代码吗?这是代码
函数Read Cfg{$js=Get Content-Raw-Path$args[0]从Json返回ConvertFrom-InputObject$js}
此函数返回带有
a.b.c
属性的PSCustomObject,我使用该属性测试该函数。此函数看起来像一个。请后退一步,描述您试图解决的实际问题,而不是您认为的解决方案。您能告诉我PS自定义对象与解码的JSON文件是什么样的吗。我在类似于
[[“aaa”、“bbb”]、[“ccc”、“ddd”]
的属性上测试了此函数。像
AddItem$a.b.c 1
一样调用它,其中
$a.b.c
就是那些数组。我的意思是,你能发布使
PSCUSTOMObject
的代码吗?这是代码
函数Read Cfg{$js=Get Content-Raw-Path$args[0]从Json返回ConvertFrom-InputObject$js}
此函数返回带有
a.b.c
属性的PSCustomObject,我使用该属性测试该函数。此函数看起来像一个。请退后一步,描述您试图解决的实际问题,而不是您认为的解决方案。