Win32_OperatingSystem.FreePhysicalMemory e $ _. TotalVisibleMemory dando saída em unidades erradas

4

Eu tenho compilado um script bastante simples para monitorar alguns aspectos do uso do farm do Terminal Server e estou implementando uma seção em que verifico o uso da memória nos servidores em um determinado momento. Aqui está a seção específica que estou usando para obter isso:

<#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

Esta saída:

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

Mas; quando mudo o ($ _. SysMem.TotalVisibleMemorySize / 1GB ) para ($ _. SysMem.TotalVisibleMemorySize / 1MB )

Produz:

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

Qual é o correto. Mas eu sinto que estou tomando pílulas loucas neste momento. Estou faltando alguma coisa simples aqui para explicar por que estes estão apenas retornando o valor que se traduz em MEGABYTES de memória, em oposição aos GIGABYTES reais de memória que tenho nos sistemas?

Eu tentei executar este script contra:

  • Windows 8.1
  • Windows 10 (Prévia da tecnologia)
  • Windows Server 2012 R2

Sempre o mesmo resultado.

    
por Get-HomeByFiveOClock 18.02.2015 / 20:50

1 resposta

3

De acordo com a classe Win32_OperatingSystem no MSDN :

TotalVisibleMemorySize
Data type: uint64
Access type: Read-only
Total amount, in kilobytes, of physical memory available to the operating system.

Claro que o mesmo é verdade para FreePhysicalMemory .

A divisão por 1GB no PowerShell é o equivalente a dividir por 1073741824 (ou por 1024*1024*1024 ). Portanto, a quantidade de memória precisaria ser expressa em bytes para que a divisão por 1 GB retornasse uma quantidade de RAM em GB.

Como TotalVisibleMemorySize está em kilobytes, você pode converter em GB por:

TotalVisibleMemorySize/1MB

ou

TotalVisibleMemorySize*1024/1GB
    
por 18.02.2015 / 21:11