如何让 PowerShell 从管道读取?

如何让 PowerShell 从管道读取?

我需要让 Windows Server 2019 上的 PowerShell 从(未命名的)管道读取并启动它读取的命令,这样我就可以在同一 shell 上启动多个命令,即使事先不知道它们。
普通管道会使其退出(可能是在 EOF 上,没有看到错误),我尝试了一种我认为可行的方法,但它占用了 100% 的 CPU,这太多了:

-command 'while ($true) {$command = read-host; 
if ($command) {invoke-expression -Command $command}}'

我怎样才能做到这一点?这可能吗?

答案1

您可以将逻辑放入函数中,而不是 while 循环中。这样,您就可以根据需要调用该函数来输入命令。您甚至可以将函数放入脚本中,对其进行点源处理,然后在您准备好输入之前未知的命令时调用该函数。

电源外壳

Function Command () {
    $command = read-host;
    invoke-expression -Command "$command";
    };

Command;

如果你把它放入C:\Scripts\command.ps1

Function Command () {
    $command = read-host;
    invoke-expression -Command "$command";
    };

然后你就可以在终端会话中直接使用点源

. "C:\Scripts\command.ps1";

然后您可以自由调用该函数来输入要调用的命令。 在此处输入图片描述

PS C:\Users> command
Write-Host "My dynamic PS command invoker" -Foreground Yellow
My dynamic PS command invoker

支持资源

相关内容