2013-07-16 4 views
9

Sto cercando di ottenere le dimensioni della memoria fisica usando PowerShell, ma senza usare get-wmiobject.Come si ottiene la dimensione totale della memoria fisica utilizzando PowerShell senza WMI?

Ho utilizzato il seguente cmdlet PS per ottenere le dimensioni della memoria fisica, ma il valore cambia ad ogni nuovo sondaggio.

(get-counter -counter "\Memory\Available Bytes").CounterSamples[0].CookedValue + 
(get-counter -counter "\Memory\Committed Bytes").CounterSamples[0].CookedValue 

In generale, questo mi dà un valore intorno: 8.605.425,664 mila byte

sto anche testando il valore che ricevo da aggiungere questi contatori con il valore restituito dal

(get-wmiobject -class "win32_physicalmemory" -namespace "root\CIMV2").Capacity 

Questo dà me il valore: 8589934592 byte

Quindi, non solo la memoria fisica totale calcolata dai contatori cambia, ma il valore è diverso dal valore WMI da un paio di me gabytes. Qualcuno ha qualche idea su come ottenere le dimensioni della memoria fisica senza usare WMI?

+0

cosa vuoi? Disco fisico o memoria fisica? Il tuo esempio mostra la memoria fisica e la tua domanda riguarda il disco fisico. – ravikanth

+0

Siamo spiacenti. Li ho confusi. Voglio le dimensioni della memoria fisica. Modificherò la mia domanda. Grazie! – eltaco431

+2

Solo per curiosità, perché vuoi evitare WMI? –

risposta

17

Se non si desidera utilizzare WMI, è possibile suggerire systeminfo.exe. Ma potrebbe esserci un modo migliore per farlo.

+1

Interessante, sul mio sistema che ha installato 8 GB (o esattamente 8192 MB), le informazioni di sistema segnalano che ho un totale di 8155 MB. Sospetto che non tutti gli 8 GB siano utilizzabili dal sistema che potrebbero spiegare la differenza. –

+0

Sì. Il tuo BIOS potrebbe mappare una certa quantità di memoria per le funzioni di shadowing del BIOS. – ravikanth

+0

Quindi la domanda è - qual è l'OP in realtà dopo? Memoria installata o memoria totale disponibile per l'utilizzo da parte del computer? –

9

Mi piacerebbe prendere nota di questo per le persone che fanno riferimento in futuro.

Volevo evitare WMI perché utilizza un protocollo DCOM, che richiede al computer remoto di disporre delle autorizzazioni necessarie, che potrebbero essere impostate manualmente solo su tale computer remoto.

Quindi, volevo evitare l'utilizzo di WMI, ma utilizzando il contatore delle entrate spesso non avevo il contatore delle prestazioni che volevo.

La soluzione che ho usato era il Common Information Model (CIM). A differenza di WMI, CIM non utilizza DCOM per impostazione predefinita. Invece di restituire oggetti WMI, i cmdlet CIM restituiscono oggetti PowerShell.

CIM utilizza il protocollo Ws-MAN per impostazione predefinita, ma funziona solo con computer che hanno accesso a Ws-Man 3.0 o versioni successive. Pertanto, le versioni precedenti di PowerShell non sarebbero in grado di emettere cmdlet CIM.

Il cmdlet ho finito per usare per ottenere dimensione totale della memoria fisica era:

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

Se sulla macchina sono installati più banchi RAM, il comando restituirà un elenco. Il seguente mostrerà un totale: '(Get-CimInstance -ClassName 'Cim_PhysicalMemory' | Measure-Object -Property Capacity -Sum) .Sum' –

+0

Ho sostituito' Get-CimInstance' con 'Get-WmiObject' per buona misura –

4

Id piace dire che invece di andare con l'systeminfo questo aiuterebbe più volte per ottenere la memoria fisica totale di GB macchina

Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum/1GB),2))} 

è possibile passare questo valore per la variabile e ottenere il risultato lordo di memoria fisica totale della macchina

$totalmemory = Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum/1GB),2))} 
    $totalmemory 
0

Per chi proviene da qui il giorno dopo e l'età e uno una soluzione di lavoro:

(Get-WmiObject -class "cim_physicalmemory" | Measure-Object -Property Capacity -Sum).Sum 

questo darà la somma totale di byte.

$bytes = (Get-WmiObject -class "cim_physicalmemory" | Measure-Object -Property Capacity -Sum).Sum 

$kb = $bytes/1024 
$mb = $bytes/1024/1024 
$gb = $bytes/1024/1024/1024 

Ho testato fino a Windows Server 2008 (winver 6.0) anche lì questo comando sembra funzionare