我在这个问题上苦思冥想。
我知道如果我在Powershell中创建一个数组,然后复制这个数组,它会被复制为引用类型而不是值类型。
所以,经典的例子是:
$c = (0,0,0)
$d = $c
$c[0] = 1
$d
1
0
0
解决办法是执行
$d = $c.clone()
但是,如果数组本身是引用类型的集合,则此方法不起作用。这就是我的问题所在。我试图创建一个进程数组来跟踪 CPU 使用情况,通过创建 Process 数组,等待一段时间,然后检查最新值并计算差异来完成。但是 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()”逐个输入,PS会抱怨无法在此情况下使用Clone。
有什么建议吗?
另外,只是为了提醒一下,第二个$a = PS | ....
行实际上并不需要,因为$a
是对PS列表对象的引用类型,每当调用$a
时,它都会更新并返回最新的值。我包含它只是为了让我在这里要达到的目标更清晰。