实现效果如图
cat g03.ps1
# 连接到 vCenter Server
Connect-VIServer -Protocol https -User 'administrator@vsphere.local' -Password 'Ancas#2023!' -Server 10.1.1.15
# 获取所有虚拟机的信息
$vmInfo = Get-VM | ForEach-Object {
# 获取虚拟机的 IP 地址
$ipAddress = ($_ | Get-VMGuest).IPAddress
# 获取虚拟机的核心数量
$numCpu = $_.NumCpu
# 获取虚拟机最近 5 分钟的 CPU 使用情况,只有当虚拟机处于开机状态时才获取
$cpuUsage5Min = if ($_.PowerState -eq 'PoweredOn') { $_ | Get-Stat -Stat cpu.usage.average -Start (Get-Date).AddMinutes(-5) -Realtime | Measure-Object Value -Average | Select-Object -ExpandProperty Average } else { $null }
# 获取虚拟机的资源使用情况
$memoryUsageMB = $_.ExtensionData.Summary.QuickStats.GuestMemoryUsage
# 获取虚拟机的最大内存资源量
$maxMemoryUsageMB = $_.ExtensionData.Summary.Runtime.MaxMemoryUsage
# 计算内存资源使用百分比
$memoryUsagePercent = if ($maxMemoryUsageMB -eq 0) { 0 } else { $memoryUsageMB / $maxMemoryUsageMB * 100 }
# 获取虚拟机在虚拟数据中心中的位置
$folder = $_.Folder
# 获取虚拟机的硬盘信息
$hardDisks = Get-HardDisk -VM $_
$totalDiskCapacity = ($hardDisks | Measure-Object -Property CapacityKB -Sum).Sum / 1MB # 将总硬盘容量从 KB 转换为 GB
# 创建一个包含所有信息的对象
New-Object PSObject -Property @{
'Name' = $_.Name
'IP Address' = if ($ipAddress -ne $null -and $ipAddress.Length -gt 0) { $ipAddress[0] } else { 'N/A' }
'Power State' = $_.PowerState
'CPU Cores' = $numCpu
'CPU Usage Last 5 Min (%)' = $cpuUsage5Min
'Memory Usage (MB)' = $memoryUsageMB
'Max Memory (MB)' = $maxMemoryUsageMB
'Memory Usage (%)' = $memoryUsagePercent
'Total Disk Capacity (GB)' = $totalDiskCapacity
'Folder' = $folder
}
}
# 导出到 CSV 文件
$vmInfo | Export-Csv -Path 'vm_info33.csv' -NoTypeInformation
# 断开 vCenter Server 连接
Disconnect-VIServer -Server 10.1.1.15 -Confirm:$false