19

PowerShell を使用して物理メモリ サイズを取得しようとしていますが、get-wmiobject は使用していません。

次の PS コマンドレットを使用して物理メモリ サイズを取得していますが、新しいポーリングごとに値が変わります。

(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 の値と数メガバイト異なります。WMI を使用せずに物理メモリ サイズを取得する方法について、何かアイデアはありますか?

4

10 に答える 10

30

WMI を使用したくない場合は、systeminfo.exe をお勧めします。しかし、それを行うためのより良い方法があるかもしれません。

(systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim()
于 2013-07-16T16:11:19.850 に答える
18

物事を複雑にしすぎないようにしましょう...:

(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb
于 2019-02-21T15:29:43.943 に答える
15

今後参考にする人のためにメモしておきます。

WMI は DCOM プロトコルを使用するため、リモート コンピューターに必要なアクセス許可が必要であり、そのリモート コンピューターで手動でしかセットアップできないため、WMI を回避したかったのです。

そのため、WMI の使用は避けたかったのですが、get-counter を使用すると、必要なパフォーマンス カウンターが得られないことがよくありました。

私が使用したソリューションは Common Information Model (CIM) でした。WMI とは異なり、CIM はデフォルトで DCOM を使用しません。WMI オブジェクトを返す代わりに、CIM コマンドレットは PowerShell オブジェクトを返します。

CIM はデフォルトで Ws-MAN プロトコルを使用しますが、Ws-Man 3.0 以降にアクセスできるコンピューターでのみ動作します。そのため、以前のバージョンの PowerShell では CIM コマンドレットを発行できませんでした。

物理メモリの合計サイズを取得するために最終的に使用したコマンドレットは次のとおりです。

get-ciminstance -class "cim_physicalmemory" | % {$_.Capacity}
于 2013-07-17T16:52:28.033 に答える
9

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
于 2016-08-03T17:34:54.013 に答える