Я собрал довольно простой скрипт для мониторинга некоторых аспектов использования нашей фермы терминальных серверов и реализую раздел, в котором я проверяю использование памяти на серверах в определенный момент времени. Вот конкретный раздел, который я использую для этого:
<#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 /1 ГБ) в ($ _. SysMem.TotalVisibleMemorySize /1 МБ)
Он выводит:
Win10Test has 1.1 GB free space out of 3.8 GB total available memory
Что правильно. Но я чувствую, что сейчас принимаю сумасшедшие таблетки. Мне здесь не хватает чего-то простого, чтобы объяснить, почему они возвращают только значение, которое переводится в МЕГАБАЙТЫ памяти, а не на фактические ГИГАБАЙТЫ памяти, которые у меня есть в системах?
Я пробовал запустить этот скрипт против:
Всегда один и тот же результат.
В соответствии с Win32_OperatingSystem класс в MSDN:
TotalVisibleMemorySize
Тип данных: uint64
Тип доступа: только чтение
Общая сумма, в килобайтахфизической памяти, доступной операционной системе.
Конечно, то же самое верно и для FreePhysicalMemory
.
Деление на 1GB
в PowerShell - это эквивалент деления на 1073741824
(или 1024*1024*1024
). Следовательно, объем памяти должен быть выражен в байты чтобы деление на 1ГБ возвращало количество ОЗУ в ГБ.
поскольку TotalVisibleMemorySize
в килобайтах, вы можете преобразовать в ГБ следующим образом:
TotalVisibleMemorySize/1MB
или
TotalVisibleMemorySize*1024/1GB