PowerShell脚本读取不同共享C盘空间的问题排查与优化
PowerShell远程磁盘信息查询问题解决
问题根源
Set-Location不影响远程WMI查询:你切换到\\vm1\c$这类共享目录,只是改变了当前工作路径,但Get-WmiObject默认查询的是本地计算机的WMI数据,所以三次执行返回的都是本地磁盘信息,和远程VM无关。- 未过滤目标磁盘:没有添加磁盘筛选条件,所以会返回所有逻辑盘(包括D、E等)。
修正后的脚本
直接通过Get-WmiObject的-ComputerName参数指定远程VM,同时过滤仅显示C盘:
# 查询vm1的C盘信息 Get-WmiObject -Class win32_logicaldisk -ComputerName vm1 | Where-Object { $_.DeviceId -eq 'C:' } | Format-Table DeviceId, @{n='总空间(GB)'; e={[math]::Round($_.Size/1GB, 2)}}, @{n="可用空间(GB)"; e={[math]::Round($_.FreeSpace/1GB, 2)}} -AutoSize # 查询vm2的C盘信息 Get-WmiObject -Class win32_logicaldisk -ComputerName vm2 | Where-Object { $_.DeviceId -eq 'C:' } | Format-Table DeviceId, @{n='总空间(GB)'; e={[math]::Round($_.Size/1GB, 2)}}, @{n="可用空间(GB)"; e={[math]::Round($_.FreeSpace/1GB, 2)}} -AutoSize # 查询vm3的C盘信息 Get-WmiObject -Class win32_logicaldisk -ComputerName vm3 | Where-Object { $_.DeviceId -eq 'C:' } | Format-Table DeviceId, @{n='总空间(GB)'; e={[math]::Round($_.Size/1GB, 2)}}, @{n="可用空间(GB)"; e={[math]::Round($_.FreeSpace/1GB, 2)}} -AutoSize
更简洁的写法(循环处理多台VM)
如果后续要添加更多VM,用数组循环更高效:
$vmList = @('vm1', 'vm2', 'vm3') foreach ($vm in $vmList) { Write-Host "=== $vm 的C盘存储信息 ===" -ForegroundColor Cyan Get-WmiObject -Class win32_logicaldisk -ComputerName $vm | Where-Object { $_.DeviceId -eq 'C:' } | Format-Table DeviceId, @{n='总空间(GB)'; e={[math]::Round($_.Size/1GB, 2)}}, @{n="可用空间(GB)"; e={[math]::Round($_.FreeSpace/1GB, 2)}} -AutoSize Write-Host "`n" }
注意事项
- 执行脚本的账号需要对远程VM有WMI访问权限(通常是管理员权限)。
- 远程VM需要开启WMI服务(默认已开启,若关闭需手动启动
Winmgmt服务)。
内容的提问来源于stack exchange,提问作者JBC
相关产品推荐
相关产品推荐

