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