我正在尝试使用PowerShell获取物理内存大小,但不使用get-wmiobject。
我一直在使用以下PS cmdlet来获取物理内存大小,但每次新轮询时值都会更改。
(get-counter -counter "\Memory\Available Bytes").CounterSamples[0].CookedValue +
(get-counter -counter "\Memory\Committed Bytes").CounterSamples[0].CookedValue
一般来说,这给了我一个值:8605425664字节
我也在测试从使用
返回的值添加这些计数器所获得的值(get-wmiobject -class "win32_physicalmemory" -namespace "root\CIMV2").Capacity
这给了我值:8589934592 bytes
因此,不仅从计数器计算的总物理内存发生变化,而且它的值与WMI值相差几兆字节。任何人都不知道如何在不使用WMI的情况下获得物理内存大小?
答案 0 :(得分:19)
如果您不想使用WMI,我可以建议使用systeminfo.exe。但是,可能有更好的方法来做到这一点。
(systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim()
答案 1 :(得分:10)
我想为将来参考的人做一个记录。
我想避免使用WMI,因为它使用DCOM协议,要求远程计算机具有必要的权限,只能在该远程计算机上手动设置。
所以,我想避免使用WMI,但经常使用get-counter没有我想要的性能计数器。
我使用的解决方案是公共信息模型(CIM)。与WMI不同,CIM默认不使用DCOM。 CIM cmdlet不返回WMI对象,而是返回PowerShell对象。
默认情况下,CIM使用Ws-MAN协议,但它仅适用于可以访问Ws-Man 3.0或更高版本的计算机。因此,早期版本的PowerShell将无法发布CIM cmdlet。
我最终用来获取总物理内存大小的cmdlet是:
get-ciminstance -class "cim_physicalmemory" | % {$_.Capacity}
答案 2 :(得分:7)
我想说,与使用systeminfo不同,这样可以帮助获得GB机器中的总物理内存
Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum / 1GB),2))}
您可以将此值传递给变量并获取机器中总物理内存的总输出
$totalmemory = Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum / 1GB),2))}
$totalmemory
答案 3 :(得分:2)
这将为您提供另一个WMI类的总金额:
gtin
希望这会有所帮助。
答案 4 :(得分:0)
对于那些从晚些时候来到这里的人和一个有效的解决方案:
(Get-WmiObject -class "cim_physicalmemory" | Measure-Object -Property Capacity -Sum).Sum
这将给出总字节数。
$bytes = (Get-WmiObject -class "cim_physicalmemory" | Measure-Object -Property Capacity -Sum).Sum
$kb = $bytes / 1024
$mb = $bytes / 1024 / 1024
$gb = $bytes / 1024 / 1024 / 1024
我测试了这个到Windows Server 2008(winver 6.0),即使这个命令似乎有效
答案 5 :(得分:0)
也许不是最好的解决方案,但它对我有用。
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
$VBObject=[Microsoft.VisualBasic.Devices.ComputerInfo]::new()
$SystemMemory=$VBObject.TotalPhysicalMemory
答案 6 :(得分:0)
让我们不要把事情复杂化...:
(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb
答案 7 :(得分:0)
以下给出了总的物理内存。
gwmi Win32_OperatingSystem | Measure-Object -Property TotalVisibleMemorySize -Sum | % {[Math]::Round($_.sum/1024/1024)}
答案 8 :(得分:0)
使用 Get-CimInstance
可以为您提供每个 RAM 棒的单独大小,您必须手动将这些大小相加。因此,如果可能,我更喜欢 Get-WMIObject
:
(Get-WMIObject Win32_OperatingSystem).TotalVisibleMemorySize # in KB
38326300
(Get-WMIObject Win32_OperatingSystem).TotalVisibleMemorySize / 1MB # in GB
31.8008079528809