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

Out-Gridview无法对服务器磁盘信息排序问题求助

问题分析与修正方案

你的脚本存在几个关键问题,直接导致了排序失效:

  • 管道传递断裂:Invoke-Command的远程执行结果没有通过管道传递给后续的Select-Object,相当于你每执行完一次远程命令,就单独跑了一遍Select-Object,它根本没拿到任何磁盘对象,自然做不了排序和正确展示。
  • 参数用法错误:Select-Object的-InputObject是用来传递单个对象的,批量处理对象必须用管道|来传递,你当前的写法完全没用到远程返回的数据。
  • 属性名称错误:Get-PSDrive返回的对象里,已用空间属性是Used,空闲空间是Free,你写的usedspace、freespace是不存在的,会导致对应列显示为空。
  • 循环内重复弹窗:当前脚本每处理一台服务器就弹出一个GridView,既不利于统一查看,也会让排序效果分散,无法实现全局排序。

修正后的脚本

# 读取服务器列表
$servers = Get-Content "path.txt"

# 批量收集所有服务器的磁盘信息并处理
$diskStats = Invoke-Command -ComputerName $servers {
    # 只过滤出文件系统类的磁盘驱动器,排除注册表、证书等非磁盘项
    Get-PSDrive | Where-Object { $_.Free -gt 0 -and $_.Provider.Name -eq 'FileSystem' }
} | Select-Object @{Name='盘符'; Expression={$_.Root}},
                  @{Name='已用空间(GB)'; Expression={[math]::Round($_.Used/1GB, 2)}},
                  @{Name='空闲空间(GB)'; Expression={[math]::Round($_.Free/1GB, 2)}},
                  PSComputerName |
          Sort-Object 盘符 -Descending

# 统一展示所有结果
$diskStats | Out-GridView -Title "多服务器磁盘空间统计"

核心改进说明

  1. 利用Invoke-Command本身的多计算机并行处理能力,省去手动foreach循环,效率更高
  2. 增加了文件系统驱动器过滤,避免把非磁盘的驱动器(如注册表)混入结果
  3. 把字节单位转换为更易读的GB,并保留两位小数,同时将属性名改为中文,提升可读性
  4. 先收集所有服务器的结果,再统一排序、展示,确保全局排序生效
  5. 给Out-GridView添加标题,让界面更清晰

内容的提问来源于stack exchange,提问作者MjrPayne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:10:33