powershell - Powershell:读取主机中的意外回声
问题描述
我正在尝试在 powershell 中编写一个简单的文本操作过滤器(W10-64 位上的 5.1)。我的目标是将它用作批处理(.bat)中管道的一部分,例如:
command1.exe | powershell "...my filter..." | command2.exe
我面临一个奇怪的问题:“Read-Host”cmdlet 总是回显它的输入。例子:
echo 1234 | powershell "$a=Read-Host"
生产
1234
(注意:请参阅PowerShell:在 Read-Host 中禁用回显)。
我怎样才能避免这种意想不到的回声?有没有其他方法可以在 powershell 中读取 STDIN?
注意 2:我知道我可以在 powershell 中完成所有管道工作,但由于许多原因,这不适合我的情况。我想要的是一个“通用过滤器”,适合成为“.bat”中管道的一部分。而且,不,存储中间数据的临时文件不是一种选择。
编辑:正如“Compo”所指出的,MS 文档对 Read_Host 进行了说明:
您不能将输入通过管道传输到此 cmdlet
因此,试图让它发挥作用是没有意义的。
EDIT2:正如“mklement0”所解释的,“[Read_Host] 确实接受管道,即来自外部的标准输入,例如提供给 PowerShell 的 CLI 时”。真正的问题是它旨在简化用户输入,而不是提供对标准输入的通用访问。
实际的问题是:有没有其他方法可以在 powershell 中读取 STDIN?
解决方案
有没有其他方法可以在 powershell 中读取 STDIN?
这已经发生了,您只需要知道如何挂钩它 - 例如使用$input
自动枚举器变量:
C:\> echo "camelCase" |powershell -Command "$input |ForEach-Object ToUpper"
CAMELCASE
由于 PowerShell 和 CMD 使用稍微不同的语法并且可能有点难以逃脱,我强烈建议将您的过滤器放在脚本文件中并调用它们:
# myUpperCaseFilter.ps1
$input |ForEach-Object ToUpper
# script.bat
command1.exe |powershell -File path\to\myUpperCaseFilter.ps1 |command2.exe
推荐阅读
- ruby-on-rails - 如何为rails在link_to中添加:id?
- excel - 在 excel (VBA) 中设置动态旋转值
- javascript - AngularJS将两页应用程序合并到一页中
- python-3.x - wx.BitmapButton 大小不正确?
- android - FlatList Pull刷新在Android的Interactable.View中不起作用
- java - Java:运行此应用程序可能存在安全风险
- c++11 - 在模板类中捕获这个时的段错误
- css - 更改 Angular Material 中的验证颜色
- .htaccess - .HTACCESS 不能拒绝 Zip 文件
- c# - 在两个填充相同数据的 tabview