2013-07-16 27 views
9

我正在嘗試使用PowerShell獲取物理內存大小,但未使用get-wmiobject。如何使用不帶WMI的PowerShell獲取總物理內存大小?

我一直在使用下面的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字節

所以,不僅是從計數器計算出來的總物理內存發生了變化,但它的值與我的一對夫婦的WMI值不同gabytes。任何人都有關於如何在不使用WMI的情況下獲得物理內存大小的任何想法?

+0

你想要什麼?物理磁盤或物理內存?你的例子顯示物理內存,你的問題是關於物理磁盤。 – ravikanth

+0

對不起。我讓他們感到困惑。我想要物理內存大小。我會編輯我的問題。謝謝! – eltaco431

+2

出於好奇,你爲什麼要避免WMI? –

回答

17

如果你不想使用WMI,我可以建議systeminfo.exe。但是,可能有更好的方法來做到這一點。

(systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim() 
+1

有趣的是,在我安裝了8GB(或8192MB)的系統上,系統信息報告總共有8155MB。我懷疑並不是所有的8GB都可以被系統使用,這可以解釋不同之處。 –

+0

是的。您的BIOS可能會映射一定量的內存以用於BIOS遮蔽功能。 – ravikanth

+0

所以問題是 - 什麼是OP實際上後?已安裝的內存或可供計算機使用的內存總量? –

9

我想爲將來參考的人做一個記錄。

我想避免WMI,因爲它使用DCOM協議,要求遠程計算機具有必需的權限,只能在該遠程計算機上手動設置權限。

所以,我想避免使用WMI,但是經常使用get-counter並沒有我想要的性能計數器。

我使用的解決方案是公共信息模型(CIM)。與WMI不同,CIM默認情況下不使用DCOM。 CIM cmdlet不返回WMI對象,而是返回PowerShell對象。

默認情況下,CIM使用Ws-MAN協議,但只適用於可以訪問Ws-Man 3.0或更高版本的計算機。因此,早期版本的PowerShell將無法發佈CIM cmdlet。

我結束了使用,以獲得總物理內存大小的小命令是:

get-ciminstance -class "cim_physicalmemory" | % {$_.Capacity} 
+1

如果機器安裝了多個RAM庫,您的命令將返回一個列表。下面一個會顯示一個總數: '(Get-CimInstance -ClassName'Cim_PhysicalMemory'| Measure-Object -Property Capacity -Sum).Sum' –

+0

我用'Get-WmiObject'取代了'Get-CimInstance', –

4

我還想說,而不是與系統的系統信息會,這將有助於在獲得在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 
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)即使有這個命令似乎工作

相關問題