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

PowerShell脚本为何无法读取管道输入?如何实现管道读入?

问题原因
  • PowerShell的管道传递的是对象流,而非传统的字节/文本流。你的脚本直接调用.NET的[System.Console]::OpenStandardInput()读取标准输入,这和PowerShell的管道机制不兼容。
  • 执行type myfile.txt | ./myscript.ps1时,PowerShell会将文件内容拆分为字符串对象存入管道,但不会把这些对象映射到.NET的标准输入流中,导致StreamReader无法读取管道内容,转而等待键盘输入。
解决方法

方法1:使用PowerShell原生管道读取(推荐)

利用PowerShell的原生机制读取管道输入,有两种常用方式:

方式A:通过$input自动变量

foreach ($line in $input) {
    "Processed: $line"
}

方式B:通过process脚本块(适合复杂处理场景)

process {
    "Processed: $_"
}

上述两种写法都能直接读取管道传递的每一行内容,执行type myfile.txt | ./myscript.ps1即可正常工作。

方法2:适配.NET StreamReader的读取方式

如果坚持使用.NET的StreamReader,需要先将PowerShell的对象流转换为文本流,在执行命令时添加Out-String -Stream:

type myfile.txt | Out-String -Stream | ./myscript.ps1

Out-String -Stream会把管道中的字符串对象转换为逐行的文本流,让StreamReader能正确读取到管道内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:37:44