gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:15:01 26 4
gpt4 key购买 nike

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

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

    ----------- EX1 -----------
    $foo = New-object System.Collections.Arraylist

    $foo.add("red")

    $foo.add("blue")

    $foo.remove("red")
    $foo返回单个元素值“blue”(这很好)。
  • 当我尝试使用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”的元素,而仅返回processnames的整个数组列表(wssm显示为存在于数组中)并且不会引发任何错误。

    当我做一个
    $foo |get-member

    它返回了:
    TypeName: System.String

    .remove被列为一种方法。当我做一个:
    $test |get-member

    它返回了:
    TypeName: Selected.System.Diagnostics.Process

    而且.remove未列为方法(为什么不抛出错误是未知的)。
    $foo的结果不包含标题,而$ test的结果包含我的get-process步骤中的select的“processname”标题。

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

    谢谢你的帮助。

    最佳答案

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

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

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

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com