如何通过管道将CMD控制台应用输出传递到PowerShell处理且无需临时文件
解决方案
你给出的示例代码无法生效的核心原因是:$_ 是PowerShell的管道上下文变量,仅在循环处理管道对象的块内部才能正确指代当前输入行,直接写在-Command的根位置无法读取到cmd传递的管道内容。
无需临时文件的正确写法如下,可直接实现SET命令输出全部以绿色字体展示:
cmd /c SET | powershell -Command "$input | ForEach-Object { Write-Host -ForegroundColor Green $_ }"
原理解释
- cmd与PowerShell原生支持跨进程匿名管道传递文本内容,全程无临时文件生成,执行效率更高
$input是PowerShell的内置自动变量,专门用于接收传递给命令块的未命名管道输入- 如果需要对传入内容做更复杂的处理,直接把逻辑写在
ForEach-Object的代码块内即可,比如只高亮显示包含PATH的行:cmd /c SET | powershell -Command "$input | ForEach-Object { if($_ -match 'PATH') { Write-Host -f Green $_ } else { Write-Host $_ } }"
内容的提问来源于stack exchange,提问作者etix。
相关产品推荐
相关产品推荐

