如果我查看任务管理器,我可以看到"使用中"记忆。
我知道我可以在PerfMon
中获取性能信息,但我不知道Perfmon中的哪个计数器会检索此值。
我想写一个PowerShell脚本来查找过去一天的平均内存使用情况。 PerfMon是我能想到的唯一选择。在PowerShell中有更好的方法吗?
答案 0 :(得分:4)
Get-Counter -Counter
是在PowerShell 2+中获得性能计数器的方法。 "在使用中"看起来它是Total Memory - Available
的舍入值:
[math]::Round(((((Get-Ciminstance Win32_OperatingSystem).TotalVisibleMemorySize * 1kb) - ((Get-Counter -Counter "\Memory\Available Bytes").CounterSamples.CookedValue)) / 1GB),1)
答案 1 :(得分:0)
我通常做的是运行以下内容来获取当前信息:
$UsedRAM
变量就是您要找的。
$SystemInfo = Get-WmiObject -Class Win32_OperatingSystem | Select-Object Name, TotalVisibleMemorySize, FreePhysicalMemory
$TotalRAM = $SystemInfo.TotalVisibleMemorySize/1MB
$FreeRAM = $SystemInfo.FreePhysicalMemory/1MB
$UsedRAM = $TotalRAM - $FreeRAM
$RAMPercentFree = ($FreeRAM / $TotalRAM) * 100
$TotalRAM = [Math]::Round($TotalRAM, 2)
$FreeRAM = [Math]::Round($FreeRAM, 2)
$UsedRAM = [Math]::Round($UsedRAM, 2)
$RAMPercentFree = [Math]::Round($RAMPercentFree, 2)
现在我们知道如何获取当前/使用内存,但获得平均值需要更多代码。
使用Get-Counter
我们可以设置平均值的计数器,但请注意,这只会提供测试期间的平均值,并且不会及时返回。
为了更好地理解平均值,我做了大约1000次计数。请注意,这也会占用内存。根据系统的语言,格式可能是错误的。
$interval = 1 #seconds
$maxsamples = 1000
$memorycounter = (Get-Counter "\Memory\Available MBytes" -maxsamples $maxsamples -sampleinterval $interval |
select -expand countersamples | measure cookedvalue -average).average
### Memory Average Formatting ###
$freememavg = "{0:N0}" -f $memorycounter
### Get total Physical Memory & Calculate Percentage ###
$physicalmemory = (Get-WMIObject -class Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).Sum / 1mb
$physicalmemory - $memorycounter
#$physicalmemory - $freememavg #Depending on the Formatting of your system
这也可以通过CPU和DISK来完成。