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

PowerShell管道输出后续传递问题求助:为何无法继续处理结果

PowerShell管道问题解析

先给你理清楚管道的核心逻辑:PowerShell管道是把前一个命令输出的对象,逐个传递给下一个命令处理。$_这个自动变量,只有在脚本块{}内部才代表当前正在处理的管道对象,出了脚本块它就不生效了。

写法1的错误原因

Get-Process | Where-Object { $_.ProcessName -match 'acc' } |
     Select-Object -Property id, Name |
     write-host $_.name

这里的问题有两个:

  1. Write-Host默认不接收管道输入,它不会主动获取前一个命令的输出对象。
  2. $_.name写在脚本块之外,此时$_是空值,根本取不到管道传来的对象属性。

要实现你想要的输出,得用ForEach-Object把Write-Host包在脚本块里,让$_能正确指代管道对象:

Get-Process | Where-Object { $_.ProcessName -match 'acc' } |
    Select-Object -Property id, Name |
    ForEach-Object { Write-Host $_.Name }

写法2的错误原因

Get-Process | Where-Object { $_.ProcessName -match 'acc' } |
    Select-Object -Property id, Name | $_ 

$_是PowerShell的自动变量,不是可执行命令。管道右侧必须是能处理输入的命令(比如Where-Object、ForEach-Object这类),直接放$_完全不符合语法规则,必然报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:59:58