我一直在编写一个非常简单的脚本来监控终端服务器场使用情况的某些方面,并正在实施一个部分,用于检查给定时间点服务器上的内存使用情况。以下是我用来获取该信息的特定部分:
<#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(技术预览版)
- Windows Server 2012 R2
结果总是一样的。
答案1
根据MSDN 上的 Win32_OperatingSystem 类:
TotalVisibleMemorySize
数据类型:uint64
访问类型:只读
总金额,以千字节为单位,操作系统可用的物理内存。
当然 也同样如此FreePhysicalMemory
。
在 PowerShell 中,除以1GB
相当于除以1073741824
(或除以1024*1024*1024
)。因此,内存量需要表示为字节为了除以 1GB 可以返回以 GB 为单位的 RAM 数量。
由于TotalVisibleMemorySize
单位为千字节,因此您可以通过以下方式转换为 GB:
TotalVisibleMemorySize/1MB
或者
TotalVisibleMemorySize*1024/1GB