私はこれで壁に頭をぶつけてきました。
Powershellで配列を作成してから配列をコピーすると、値型ではなく参照型としてコピーされることを私は知っています。
したがって、古典的な例は次のとおりです。
$c = (0,0,0)
$d = $c
$c[0] = 1
$d
1
0
0
解決策は次の$d = $c.clone()
とおりです。配列自体が参照型のコレクションである場合、これは機能しません。これは私の問題です。プロセスの配列を作成して CPU 使用率を追跡する配列を作成しようとしています。しばらく待ってから、最新の値を確認して差を計算します。ただし、Get-Process は参照配列を作成します。したがって、次のことを行うと:
$a = ps | sort -desc id | where-object {$_.CPU -gt 20} #Get current values
$b = $a.clone() #Create a copy of those values.
sleep 20 #Wait a few seconds for general CPU usage...
$a = ps | sort -desc id | where-object {$_.CPU -gt 20} #Get latest values.
$a[0]
$b[0] #returns the same value as A.
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessNam
------- ------ ----- ----- ----- ------ -- ----------
3195 57 90336 100136 600 83.71 7244 OUTLOOK
$a
$b
常に同じ値を返します。$b[0] = "$a[0].clone()" のようなものを使用して一度に 1 つのエントリを実行しようとすると、PS はこの場合 Clone を使用できないと文句を言います。
助言がありますか??
また、参考までに、2$a = PS |....
行目は PS リスト オブジェクトへの参照型であるため、実際には必要ありません。実際に更新され、呼び出される$a
たびに最新の値が返されます。$a
ここで何を達成しようとしているのかを明確にするために、これを含めました。