数组作为PSObject成员powershell

时间:2012-12-21 22:21:19

标签: arrays powershell

我正在尝试删除我认为是PSObject成员的数组元素。

$obj = New-Object psobject
$obj | Add-Member -MemberType NoteProperty -Name member -Value @()
$obj.member += $null
$obj.member[0] = "A"
$obj.member += $null
$obj.member[1] = "B"
到目前为止一切顺利。 $ obj.member的行为类似于一个数组,我可以调用单个元素并使用-join转换为字符串。但是,当我尝试删除一个元素时,我发现$ obj.member根本就不是一个数组。 $ obj.member | gm告诉我它是一个字符串,当我调用$ obj.member.removeRange()时,我收到一个错误: 说明:[System.Object []]不包含名为'removeRange'的方法。

所以..它看起来像一个字符串,表现得像一个数组,实际上是一个Object。

我的印象是,如果我将对象的NoteProperty类型成员的值定义为@(),那么该成员将是一个数组 - 显然这不是真的,但从未发生过,因为我能够 - 加入元素。

请解释这里发生了什么。

最终,我想让一个Object成员成为一个数组,所以我可以添加AND删除元素。

谢谢!

1 个答案:

答案 0 :(得分:2)

您正在添加该成员,它确实是一个数组。

  

$ obj.member | gm告诉我它是一个字符串

管道到Get-Member展开任何集合并显示有关内部集合的对象的信息,而不是集合本身。例如,1,2,3 | gm告诉我int类型的成员。如果我想了解集合本身,你可以这样做:

,(1,2,3) | gm
,$obj.Member | gm
  

当我调用$ obj.member.removeRange()时,我收到错误

那是因为数组类型没有RemoveRange方法,正如您在管道gm时所看到的那样。另请参阅System.Array here上的文档。