我在 PowerShell 中进行操作系统调用以获取特定进程的工作集。
当工作集<2GB 时,正确返回值。
当工作集在 2GB 和 4GB 之间时,该值作为负数返回。我可以用 4294967295 异或,乘以 -1,得到正确的值。
世界上一切都很好……直到工作集超过 4GB。现在返回的值似乎从 4GB 开始计数... IOW,我需要将结果添加到 4294967296。
我的按位运算有点生疏,我不确定是否有办法根据操作系统返回的内容准确计算正确的值。理想情况下,我希望有一个可以完成这项工作的表达式,或者至少是一系列“if”语句。
这是 PS 代码,以防它澄清情况。它仅准确计算值 < 4GB 的工作集。
$ServerName = "MyServer"
# get a collection containing all process objects on the system
$Procs = (Get-Process -ComputerName $ServerName) | Sort-Object -Descending WS
# Output each process and its working set
foreach($Proc in $Procs)
{
$WorkingSet = [int64]($Proc.WorkingSet64)
#for values greater than 2^32, a negative value will be returned... need to convert to 64 bit:
if($WorkingSet -lt 0) {
$WorkingSet = 4294967295 -bxor $WorkingSet * -1
}
$Process = $Proc.ProcessName
Write-Host "Process: $process"
Write-Host "Working Set: $WorkingSet"
Write-Host "------------------------------"
}