gpt4 book ai didi

powershell - 通过按位运算将大整数转换为有意义的值

转载 作者:行者123 更新时间:2023-12-01 04:03:24 25 4
gpt4 key购买 nike

我在 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 "------------------------------"
}

最佳答案

这是一个 bug in the .NET Framework .它只抓取结果的底部 32 位并将其转换为 64 位数字。

问题是您没有足够的信息来确定最高位被截断后的实际值。您是否有任何值可以确定的范围?例如,如果您知道它将介于 2 GB 和 6 GB 之间,那么映射该方法返回的值会很容易。

我能想到的唯一通用解决方案是查看其他可用属性,看看它们中是否有任何一个可以给您足够的提示来确定返回值的范围。

关于powershell - 通过按位运算将大整数转换为有意义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11417944/

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