使用 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
我有一个 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