0

我正在尝试删除我认为是 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”的方法。

所以..它看起来像一个字符串,行为像一个数组,实际上是一个对象。

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

请解释这里发生了什么。

最终,我试图让一个 Object 成员成为一个数组,这样我就可以添加和删除元素。

谢谢!!

4

1 回答 1

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 此处的文档。

于 2012-12-21T23:22:58.063 回答