it-swarm.com.de

Wie erhalte ich mit PowerShell die gesamte physische Speichergröße ohne WMI?

Ich versuche, die physische Speichergröße mithilfe von PowerShell zu ermitteln, jedoch ohne get-wmiobject zu verwenden.

Ich habe das folgende PS-Cmdlet verwendet, um die physische Speichergröße abzurufen, der Wert ändert sich jedoch mit jeder neuen Abfrage.

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

Im Allgemeinen gibt dies einen Wert um: 8605425664 Bytes

Ich teste auch den Wert, den ich durch das Hinzufügen dieser Zähler mit dem zurückgegebenen Wert von bekomme 

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

Das gibt mir den Wert: 8589934592 Bytes

Daher ändert sich nicht nur der gesamte physische Speicher anhand der Zähler, sondern auch der Wert des WMI-Werts um einige Megabytes. Hat jemand eine Idee, wie man die physische Speichergröße ohne WMI erhält?

10
eltaco431

Wenn Sie WMI nicht verwenden möchten, kann ich systeminfo.exe vorschlagen. Es gibt jedoch möglicherweise einen besseren Weg, dies zu tun.

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

Ich möchte dies für diejenigen Personen notieren, die in der Zukunft referenzieren. 

Ich wollte WMI vermeiden, weil es ein DCOM-Protokoll verwendet, sodass der Remotecomputer über die erforderlichen Berechtigungen verfügt, die nur manuell auf diesem Remotecomputer eingerichtet werden können. 

Also wollte ich die Verwendung von WMI vermeiden, aber die Verwendung von Get-Counter hatte oft nicht den gewünschten Leistungsindikator.

Die Lösung, die ich verwendete, war das Common Information Model (CIM). Im Gegensatz zu WMI verwendet CIM standardmäßig kein DCOM. Anstatt WMI-Objekte zurückzugeben, geben CIM-Cmdlets PowerShell-Objekte zurück. 

CIM verwendet standardmäßig das Protokoll Ws-MAN, funktioniert jedoch nur mit Computern, die Zugriff auf Ws-Man 3.0 oder höher haben. Daher konnten frühere Versionen von PowerShell keine CIM-Cmdlets ausgeben.

Das Cmdlet, das ich zum Abrufen der physischen Gesamtgröße des Arbeitsspeichers verwendet habe, lautete wie folgt:

get-ciminstance -class "cim_physicalmemory" | % {$_.Capacity}
9
eltaco431

Ich würde gerne sagen, dass, anstatt mit systeminfo zu gehen, dies helfen würde, den gesamten physischen Arbeitsspeicher in GB der Maschine zu erhalten 

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

sie können diesen Wert an die Variable übergeben und die Bruttoausgabe für den gesamten physischen Arbeitsspeicher der Maschine abrufen 

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

Vielleicht nicht die beste Lösung, aber es hat für mich funktioniert.

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
$VBObject=[Microsoft.VisualBasic.Devices.ComputerInfo]::new()
$SystemMemory=$VBObject.TotalPhysicalMemory

Lasst uns die Dinge nicht übermäßig komplizieren ...:

(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb
0
Zack A

Damit erhalten Sie den Gesamtbetrag aus einer anderen WMI-Klasse :

$cs = get-wmiobject -class "Win32_ComputerSystem"
$Mem = [math]::Ceiling($cs.TotalPhysicalMemory / 1024 / 1024 / 1024)

Hoffe das hilft.

0
NVLMagic

Für diejenigen, die ab einem späteren Tag hierher kommen und eine funktionierende Lösung:

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

dies ergibt die Gesamtsumme der Bytes.

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

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

Ich habe dies bis zu Windows Server 2008 (Winver 6.0) getestet, auch da scheint dieser Befehl zu funktionieren

0
Joel Harkes