arrays - 从 .NET 数组中删除元素 .remove 方法未按预期工作(Powershell)

标签 arrays powershell element

我有一些代码,我试图在 Powershell 中使用 .NET 方式处理数组,而 .remove 方法没有删除我想要的元素(示例 2 和 3 中的进程名称“wssm”)。我做错了什么,但我不确定那是什么。

  1. 当我使用 .add 填充特定元素时,测试示例有效:

    -----------EX1------------

    $foo = New-object System.Collections.Arraylist
    
    $foo.add("red")
    
    $foo.add("blue")
    
    $foo.remove("red")
    

    $foo 返回单个元素值“blue”(这很好)。

  2. 当我尝试使用 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 的结果不包含 header ,而 $test 的结果包含来 self 的 get-process 步骤中的选择的“processname” header 。

这是一个多维数组问题吗?我只是在 .remove("wssm") 步骤中没有使用正确的语法?或者我应该以不同的方式声明数组?

感谢您的帮助。

最佳答案

当您使用 Get-Process 的输出填充 ArrayList 时,您正在创建一个对象数组。使用字符串“wssm”调用 Remove() 方法不会执行任何操作,因为该数组不包含这样的字符串对象。相反,您需要识别具有该进程名称的对象并从数组中删除该对象:

$wssm = $test | ? { $_.ProcessName -eq "wssm" }
$test.Remove($wssm)

关于arrays - 从 .NET 数组中删除元素 .remove 方法未按预期工作(Powershell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16740067/

相关文章:

c++ - 为什么可以在函数参数中指定数组的大小?

linux - 如何在cmd Windows上运行linux命令

azure - Az Powershell 函数 - 如何获取 JSON 格式的输出

javascript - Jquery,返回 ID 为 "begin with"的所有元素的 ID 字符串列表?

JavaScript JSON 数组编号不一致

javascript - 使用 Angular js 将具有相同 id 的重复对象从 json 数据合并到单个对象中

powershell - 在 PowerShell 中重新启动已完成的后台作业

python - Selenium dropmenu 是 div

xsd - XSD-允许元素类型为整数或为空

c++ - 如何使用#define 语句来设置字节数组?