我正在尝试删除我认为是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删除元素。
谢谢!
答案 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上的文档。