powershell查虚拟机内存需区分hyper-v与vmware:hyper-v可用get-vm和性能计数器获取分配量及动态内存使用率;vmware则需分析vmware-vmx进程工作集、wmi系统内存及rammap物理页视图。
powershell 查询虚拟机内存占用,关键看运行环境:hyper-v 和 vmware 的方法完全不同,不能混用。本地 hyper-v 虚拟机可直接用系统内置 cmdlet 获取实时分配与使用数据;vmware 虚拟机在 windows 宿主机上则需借助 rammap 或 wmi 分析其“隐形”内存行为,powershell 本身无法直接读取 vsphere 中 vm 的内存使用量。
查 Hyper-V 虚拟机的内存分配与实时使用
确保以管理员身份运行 PowerShell,并已启用 Hyper-V 模块:
-
查看所有 VM 内存分配概况:运行
Get-VM | Select-Object Name, State, MemoryAssigned, ProcessorCount, Generation,其中MemoryAssigned是当前分配的物理内存字节数(非使用量) -
获取运行中 VM 的实时内存使用率:需配合性能计数器,例如:
Get-Counter "\Hyper-V Dynamic Memory Balancer(*)\Average Guest Memory Usage %" -SampleInterval 1 -MaxSamples 1 | Select-Object -ExpandProperty CounterSamples | Select-Object InstanceName, CookedValue
注意:该计数器仅对启用动态内存(Dynamic Memory)的 VM 有效 -
检查是否启用动态内存:运行
Get-VM | Get-VMMemory | Select-Object VMName, MinimumBytes, MaximumBytes, StartupBytes, AssignedBytes,对比AssignedBytes与StartupBytes可判断是否正在动态调整
查 VMware 虚拟机在 Windows 宿主机上的实际内存占用
PowerShell 无法直接访问 VMware Tools 报告的客户机内存数据,但能识别宿主机被 VMware 进程占用的内存总量及缓存行为:
-
定位 VMware 相关进程内存消耗:运行
Get-Process | Where-Object {$_.ProcessName -match "vmware|vmx"} | Select-Object Name, WorkingSet, PrivateMemorySize | Sort-Object WorkingSet -Descending,重点关注vmware-vmx.exe(每个 VM 对应一个实例)的WorkingSet(工作集大小) -
结合 WMI 查系统级内存压力:运行
Get-WmiObject Win32_OperatingSystem | Select-Object TotalVisibleMemorySize, FreePhysicalMemory, @{n='UsedPercent';e={[math]::Round((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory) / $_.TotalVisibleMemorySize)*100, 2)}},辅助判断整体内存是否被大量 VM 占用 -
深度分析需用 RAMMap:PowerShell 无法替代 RAMMap 的物理页级视图。若发现内存“消失”,应手动打开 RAMMap → 切换到 File Summary 或 Processes 视图,查找
vmware-vmx.exe映射的大文件(如 .vmdk、.vmem),它们常以“Mapped File”形式占用 Standby 内存
导出与批量分析技巧
运维中常需横向比对多台 VM 的内存配置:
-
导出所有运行中 VM 的内存分配详情到 CSV:
Get-VM | Where-Object {$_.State -eq 'Running'} | Select-Object Name, MemoryAssigned, ProcessorCount, Uptime, Generation | ForEach-Object { [PSCustomObject]@{ Name=$_.Name; MemoryMB=[math]::Round($_.MemoryAssigned/1MB); CPUs=$_.ProcessorCount; Uptime=$_.Uptime } } | Export-Csv C:\vm-mem-report.csv -NoTypeInformation -
快速计算某 VM 当前内存使用率(估算):若该 VM 启用了 Guest Services,可用
Get-VMGuestConfiguration -VMName "VMName" | Select-Object -ExpandProperty MemoryUsage(返回百分比数值);否则只能依赖客户机内部工具(如 Linux 的free、Windows 的性能计数器)
不复杂但容易忽略:Hyper-V 的 MemoryAssigned 是分配值,不是实时使用值;VMware 在宿主机上没有等效的 PowerShell 接口,必须结合进程分析与 RAMMap 才能看清真实内存去向。











