elt*_*431 13 memory powershell wmi byte
我正在尝试使用PowerShell获取物理内存大小,但不使用get-wmiobject.
我一直在使用以下PS cmdlet来获取物理内存大小,但值随每次新轮询而变化.
(get-counter -counter "\Memory\Available Bytes").CounterSamples[0].CookedValue +
(get-counter -counter "\Memory\Committed Bytes").CounterSamples[0].CookedValue
Run Code Online (Sandbox Code Playgroud)
一般来说,这给了我一个值:8605425664字节
我也在测试从添加这些计数器得到的值和返回值
(get-wmiobject -class "win32_physicalmemory" -namespace "root\CIMV2").Capacity
Run Code Online (Sandbox Code Playgroud)
这给了我值:8589934592字节
因此,不仅从计数器计算的总物理内存发生变化,而且它的值与WMI值相差几兆字节.任何人都有任何想法如何在不使用WMI的情况下获得物理内存大小?
rav*_*nth 22
如果您不想使用WMI,我可以建议使用systeminfo.exe.但是,可能有更好的方法来做到这一点.
(systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim()
Run Code Online (Sandbox Code Playgroud)
Zac*_*k A 15
让我们不要把事情复杂化...:
(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb
Run Code Online (Sandbox Code Playgroud)
elt*_*431 11
我想为将来参考的人做一个记录.
我想避免使用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}
Run Code Online (Sandbox Code Playgroud)
小智 7
我还想说,而不是与系统的系统信息会,这将有助于在得到总的物理内存GB的机器
Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum / 1GB),2))}
Run Code Online (Sandbox Code Playgroud)
您可以将此值传递给变量,并获取机器中总物理内存的总输出
$totalmemory = Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum / 1GB),2))}
$totalmemory
Run Code Online (Sandbox Code Playgroud)