PowerShell 自动调用exe程序并根据输出自动交互


PowerShell交流中心分类: 变量-函数-脚本-条件-循环-参数PowerShell 自动调用exe程序并根据输出自动交互
0
shawn asked 9 年 ago

以前一直在做底层纯C的工作,最近开始接触power shell ,发现这个脚本语言很有意思,就在论坛里自学了几天。非常感谢管理员和坛友对论坛的维护。
我想用power shell做一个自动化脚本,自动运行一个exe程序,就叫a.exe吧,然后根据运行环境的不同,程序会有不同的打印信息,例如:”q a?”,”q b?“,然后我想自动抓取检测这些信息,并根据不同的问题作出回答,例如”r a ”, “r b”。程序运行时间很长,会有很多打印信息,也有与用户交互的步骤。经过几天的学习,我用的是论坛里的高速流管道。现在遇到了两个问题,特来请教交流:
1,抓到的a.exe的打印信息并不是实时的,按行输出的,而是经过了缓存,然后一次性打印一大片。该怎样变成实时的输出?
2,当遇到用户交互部分时,怎样根据不同的提示,自动输入答案?这个是我百思不得其解的地方。
几天下来,感觉power shell好难啊。以前在用C做过类似的东西,fork一个进程,然后做两个管道,一个输入,一个输出就可以了。可能是习惯了C的思考方式,对于这种高级语言就转不过弯。我写的代码如下,比较粗糙简陋,贻笑大方啦。要是我的思路不对,还请大神指正,非常感谢~~

function CheckResult()
{
    begin{ }
    process
    {
        write-host $_  #把抓到的输出信息打印到当前控制台。
        if($_.toString() -eq "q a?")
        {
            #自动输入答案"r a",但是我不知道怎样实现这步。
            #而且,每次到这里,我需要手动输入一个答案以后,前面所有的的$_才会一次性打印到屏幕上。
        }

        Elseif ($_.toString() -eq "q b?")
       {
            #自动输入答案"r b"
        }
    }
    end{}
}
.\a.exe | CheckResult
0 Answers