使用 Powershell 调用其他进程并与之交互

Invoke and interact with other process using Powershell

我有一个 powershell 脚本需要 运行 另一个 .exe 文件作为其工作的一部分。

.exe 文件本身生成了一个交互式 shell,我想多次写入和读取(不终止其间的 .exe 进程)。

例如,我想 运行 来自 Powershell 的类似内容:

& my.exe

然后按以下方式与该进程交互,以便我可以读取和写入生成的 shell 进程的 stdin/stdout,如下所示:

MY.EXE> <something sent from powershell> <Output that powershell can read> MY.EXE> <something sent from powershell> <Output that powershell can ready>

等等

并最终在我完成后终止 .exe 进程。

我尝试过在 Powershell 中手动生成进程并覆盖 StdIn/StdOut/StdErr,但这充其量似乎很古怪。

有什么想法吗?

在权力shell我们使用start-job

$a = Start-Job -ScriptBlock {Get-Process }
$a | Receive-Job

您可以使用 Remove-Job
删除作业 此作业在您打开的 shell 工作,但任务调度程序添加了一些作业,您可以一次或每分钟添加任务 运行 作业 运行 作业,您可以删除调度程序

schtasks /create /tn TaskName /tr TaskRun /sc minute [/mo {1 - 1439}] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s computer [/u [domain]user /p password]] [/ru {[Domain]User | "System"} [/rp Password]]

schtasks /create /sc minute /mo 30 /tn "powershellscript" /tr c:.ps1 
schtasks /query
schtasks /delete 

对于 运行 程序,您可以在后台使用函数

 function bg() {Start-Process -NoNewWindow @args}
bg some.exe

要停止该程序,您可以

 Get-Process -Name some.exe | Stop-Process