我需要让 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