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 の結果を (以下の 2 つの異なる方法を使用して) 配列に入力し、要素値 "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 IS がメソッドとしてリストされています。私がするとき:
$test |get-member
次のように返されます。
TypeName: Selected.System.Diagnostics.Process
そして .remove はメソッドとしてリストされていません (これがエラーをスローしない理由は不明です)。
の結果に$foo
はヘッダーが含まれず、$test の結果には、get-process ステップで選択した「プロセス名」のヘッダーが含まれます。
これは多次元配列の問題ですか? .remove("wssm") ステップで正しい構文を使用していないだけですか? または、配列を別の方法で宣言する必要がありますか?
助けてくれてありがとう。