powershell 获取虚拟机磁盘信息需区分vm内部与云平台管理层:在azure vm内部用get-psdrive、get-volume等查实际使用率;在azure管理层用az模块(如get-azvm、get-azdisk)查磁盘配置元数据;本地hyper-v可用get-physicaldisk获取硬件属性;批量采集推荐invoke-command远程执行并导出csv。
powershell 获取虚拟机磁盘详细信息,需区分本地 windows 虚拟机(如 hyper-v)、azure vm 或其他云平台。核心逻辑是:在 vm 内部运行命令查实际卷/磁盘状态;若在外部管理平台(如 azure)则调用云服务 api 获取配置元数据。两者不可替代——hypervisor 层无法感知 guest os 内部的文件系统使用率。
在 Azure VM 内部查看磁盘使用详情
登录到目标 Windows VM 后,用以下命令获取真实空间占用:
-
Get-PSDrive -PSProvider FileSystem:快速列出所有有盘符的驱动器,含 Free、Used 字段(单位字节);加格式化可转 GB:
Get-PSDrive -PSProvider FileSystem | Select-Object Name, @{Name="Free(GB)";Expression={[math]::Round($_.Free/1GB,2)}}, @{Name="Used(GB)";Expression={[math]::Round($_.Used/1GB,2)}} - Get-Volume | Where-Object {$_.DriveType -eq 'Fixed'}:精准筛选本地固定磁盘,返回 Size、SizeRemaining、HealthStatus 等,适合脚本判断健康度
- Get-CimInstance Win32_Volume | Where-Object {$_.DriveLetter -and $_.DriveType -eq 3}:兼容旧系统,返回原始字节值,支持进一步计算使用率
在 Azure 管理层获取 VM 磁盘配置信息
从 Azure 订阅角度,使用 Az PowerShell 模块获取托管磁盘关联关系和规格(非使用率):
- Get-AzVM -ResourceGroupName "RG01" -Name "vm01" | Select-Object Name, StorageProfile:查看该 VM 使用的 OS 和数据磁盘名称、缓存策略、存储账户类型
- Get-AzDisk -ResourceGroupName "RG01" -DiskName "vm01_OsDisk_1_xxx":获取单个托管磁盘的 SizeGb、Sku.Name(如 Standard_LRS)、EncryptionType、CreationData.sourceUri 等元数据
- Get-AzDisk | Where-Object {$_.ManagedBy -like "*vm01*"}:反向查找被某 VM 引用的所有磁盘
检查磁盘健康与硬件属性(适用于本地或 Hyper-V VM)
若需了解物理介质类型(SSD/HDD)、型号、序列号等底层信息,可在 VM 内执行:
- Get-PhysicalDisk | Select-Object FriendlyName, Model, SerialNumber, MediaType, Size, HealthStatus, OperationalStatus:直接读取存储子系统报告,适用于已启用存储空间或直通磁盘场景
- Get-Disk | Get-Partition | Get-Volume:逐层展开查看磁盘→分区→卷的映射关系,确认是否所有空间已分配并格式化
- 注意:Get-PhysicalDisk 在标准 Azure VM 中通常返回空,因 Azure 使用虚拟 SCSI 控制器,不暴露物理设备属性;该命令主要适用于本地 Windows Server + 存储空间部署
跨多台 VM 批量采集(推荐自动化流程)
对一组 Windows VM 统一收集磁盘容量与健康状态:
- 使用 Invoke-Command 远程执行 Get-Volume,需确保 WinRM 已启用且防火墙放行 5985/5986 端口
- 脚本中包裹 try/catch,并设 -OperationTimeoutSec 30 防止单台阻塞
- 结果统一构造成 [PSCustomObject],字段包括 HostName、DriveLetter、SizeGB、FreeGB、UsedPercent、HealthStatus,最后导出为 CSV:
Export-Csv disk_usage_report.csv -Encoding UTF8 -NoTypeInformation











