【发布时间】:2021-03-10 22:13:32
【问题描述】:
我正在尝试在 powershell 中编写一个简单的文本操作过滤器(W10-64 位上的 5.1)。我的目标是将它用作批处理(.bat)中管道的一部分,例如:
command1.exe | powershell "...my filter..." | command2.exe
我遇到了一个奇怪的问题:“Read-Host”cmdlet 总是回显它的输入。示例:
echo 1234 | powershell "$a=Read-Host"
生产
1234
(注意:请参阅PowerShell: Disable echo in Read-Host)。
如何避免这种意外回声?有没有其他方法可以在 powershell 中读取 STDIN?
注意 2:我知道我可以在 powershell 中完成所有管道工作,但由于许多原因,这不适合我的情况。我想要的是一个“通用过滤器”,适合成为“.bat”中管道的一部分。而且,不,存储中间数据的临时文件不是一种选择。
编辑:正如“Compo”所指出的,MS 文档是这样描述 Read_Host 的:
您不能将输入通过管道传送到此 cmdlet
因此,试图让它发挥作用是没有意义的。
EDIT2:正如“mklement0”所解释的,“[Read_Host] 确实接受管道,即来自外部的标准输入,例如提供给 PowerShell 的 CLI 时”。真正的问题是它旨在简化用户输入,而不是提供对标准输入的通用访问权限。
实际的问题是:有没有其他方法可以在 powershell 中读取 STDIN?
【问题讨论】:
-
请解释一下 [batch-file] 标签的用途。您的问题明确指出您“正在尝试在 powershell 中编写一个简单的文本操作过滤器”,并且您的目标只是让它成为
.bat文件管道的一部分。您在哪里输入了问题中显示的命令? -
我添加了“批处理文件”标签,因为我的典型用例是批处理文件中的管道。我的示例中的命令来自控制台中的测试,但同样的情况也发生在批处理中。 (但也许我没有抓住重点,抱歉)。
-
...但是什么控制台?
-
顺便说一句,如果你看看Read-Host command information,你会清楚地看到它不接受管道输入。
-
“你不能通过管道输入这个 cmdlet”...我明白了...(+1 给你)。那么,有没有其他方法可以做到这一点? (顺便说一句:在我的情况下,“控制台”是普通的 cmd.exe 提示符)
标签: powershell batch-file