我有一些代码,我试图在 Powershell 中使用 .NET 方式处理数组,而 .remove 方法没有删除我想要的元素(示例 2 和 3 中的进程名“wssm”)。我做错了什么,我不确定它是什么。
当我使用 .add 填充特定元素时,测试示例有效:
------------EX1------------
$foo = New-object System.Collections.Arraylist $foo.add("red") $foo.add("blue") $foo.remove("red")
$foo
返回单个元素值“蓝色”(这很好)。当我尝试使用 Get-process 的结果填充数组(使用以下两种不同的方法)并尝试删除元素值“wssm”时,它似乎无法找到并删除它。
------------EX2--------------
$test = New-object System.Collections.Arraylist(,(get-process |select processname)) $test.Remove("wssm")
-------------EX3------------
$test = New-object System.Collections.Arraylist $test2= get-process |select processname $test.Addrange($Test2) $test.Remove("wssm")
示例 2 和 3 不删除包含“wssm”的元素,只返回进程名称的整个数组列表(wssm 显示为存在于数组中)并且不引发错误。
当我做一个
$foo |get-member
它回来了:
TypeName: System.String
并且 .remove 被列为一种方法。当我做一个:
$test |get-member
它回来了:
TypeName: Selected.System.Diagnostics.Process
并且 .remove 没有被列为方法(为什么不抛出错误是未知的)。
的结果$foo
不包含标题,$test 的结果包含来自我的 get-process 步骤中选择的“processname”标题。
这是一个多维数组问题,我只是在 .remove("wssm") 步骤中没有使用正确的语法?或者我应该以不同的方式声明数组?
谢谢你的帮助。