You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本读取不同共享C盘空间的问题排查与优化

PowerShell远程磁盘信息查询问题解决

问题根源

  1. Set-Location不影响远程WMI查询:你切换到\\vm1\c$这类共享目录,只是改变了当前工作路径,但Get-WmiObject默认查询的是本地计算机的WMI数据,所以三次执行返回的都是本地磁盘信息,和远程VM无关。
  2. 未过滤目标磁盘:没有添加磁盘筛选条件,所以会返回所有逻辑盘(包括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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:40:31