Win32_OperatingSystem.FreePhysicalMemory и $_.TotalVisibleMemory, выдающие выходные данные в неправильных единицах

Я собрал довольно простой сценарий для мониторинга некоторых аспектов использования нашей фермы терминальных серверов и реализую раздел, в котором я проверяю использование памяти на серверах в определенный момент времени. Вот конкретный раздел, который я использую, чтобы получить это:

<#Modified to troubleshoot this particular section; defined $TermSvr and pipe output directly to   
host:#>
$RemoteSvr = "Win10Test"

#Check current Memory Usage and Available Space
$SysMem = Get-WmiObject Win32_OperatingSystem -ComputerName $RemoteSvr
"$RemoteSvr has {0:#.0} GB free space out of {1:#.0} GB total available memory" -f   
($SysMem.FreePhysicalMemory/1GB),    
($SysMem.TotalVisibleMemorySize/1GB) | Write-Host

Это выводит:

Win10Test has **.0** GB free space out of **.0** GB total available memory

Но; когда я изменяю ($ _. SysMem.TotalVisibleMemorySize /1GB) на ($ _. SysMem.TotalVisibleMemorySize /1MB)

Это выводит:

Win10Test has 1.1 GB free space out of 3.8 GB total available memory

Что правильно. Но я чувствую, что в этот момент я принимаю сумасшедшие таблетки. Я упускаю что-то простое здесь, чтобы объяснить, почему они только возвращают значение, которое переводится в мегабайты памяти, а не в реальные гигабайты памяти, которые есть в моих системах?

Я попытался запустить этот скрипт против:

  • Windows 8.1
  • Windows 10 (Tech Preview)
  • Windows Server 2012 R2

Всегда один и тот же результат.

1 ответ

Решение

Согласно классу Win32_OperatingSystem на MSDN:

TotalVisibleMemorySize
Тип данных: uint64
Тип доступа: только для чтения
Общий объем физической памяти в килобайтах, доступный операционной системе.

Конечно, то же самое верно для FreePhysicalMemory,

Разделить на 1GB в PowerShell является эквивалентом деления на 1073741824 (или 1024*1024*1024). Следовательно, объем памяти должен быть выражен в байтах, чтобы деление на 1 ГБ возвращало объем ОЗУ в ГБ.

поскольку TotalVisibleMemorySize в килобайтах, вы можете конвертировать в ГБ:

TotalVisibleMemorySize/1MB

или же

TotalVisibleMemorySize*1024/1GB
Другие вопросы по тегам