out-gridview 本质是将结构化对象渲染为可筛选、排序、多选的交互式图形表格,需确保上游输出对象而非字符串,并通过 select-object 精简字段、-passthru 捕获选择、[pscustomobject] 自定义数据。
powershell 中用 out-gridview 展示管道对象,本质是把结构化对象转成带交互功能的图形表格窗口,不是简单“画个表”,而是让数据可筛选、可排序、可多选。关键在于确保上游输出的是对象(不是字符串),并合理控制输出行为。
基础用法:直接管道进网格视图
最简方式就是把命令结果直接传给 Out-GridView:
-
Get-Process | Out-GridView—— 显示所有进程的全部属性,支持列宽拖动、点击标题排序、顶部搜索框输入关键词过滤 -
Get-Service | Out-GridView -Title "运行中的服务"—— 自定义窗口标题,提升可读性 - 不加任何参数时,窗口关闭即结束,不返回数据到后续流程
筛选展示特定属性
实际使用中通常不需要显示全部字段,用 Select-Object 提前精简:
-
Get-Process | Select-Object Name, Id, CPU, WorkingSet | Out-GridView—— 只显示进程名、ID、CPU和内存占用 - 配合
Sort-Object预排序:... | Sort-Object CPU -Descending | Out-GridView,让高负载进程排在前面,方便一眼识别 - 字段名大小写不敏感,但建议保持与原始对象一致(如
WorkingSet不要写成workingset)
捕获用户选择结果
如果希望用户在网格里点选后继续处理,必须启用数据回传机制:
-
$selected = Get-Process | Out-GridView -PassThru—— 用户点“确定”后,选中的进程对象存入$selected - 等效写法:
... | Out-GridView -OutputMode Multiple,允许选多行;-OutputMode Single限制只能选一行 - 务必检查变量是否为空:
if ($selected) { Stop-Process -InputObject $selected -Force },避免用户直接点取消导致空操作报错
构建自定义数据表格
当原始命令不直接输出所需结构时,可用 New-Object 或 [PSCustomObject] 组装:
$data = Get-ChildItem C:\Scripts -File | ForEach-Object { [PSCustomObject]@{ Name=$_.Name; Size=$_.Length; Modified=$_.LastWriteTime } }; $data | Out-GridView -Title "脚本文件列表"- 这种写法灵活控制列名、顺序和内容格式,比如把字节数转为 KB:
Size="{0:N0} KB" -f ($_.Length / 1KB) - 注意:不要在循环里反复调用
Out-GridView,它每次都会弹新窗口;应先组装完全部数据再统一输出
不复杂但容易忽略











