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

时间:2015-03-27 13:50:54

标签: powershell process exe stdout stdin

我有一个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,但这看起来似乎很有趣。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在powershell中我们使用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   [域名]用户/密码]] [/ ru {[域名]用户| “系统”} [/ rp   密码]]

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

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

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

停止该程序

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