网站建设资讯

NEWS

网站建设资讯

PowerShell自动回复执行文件的询问-创新互联

场景

客户有个升级包,xxx.exe, 使用CMD运行后,会进行一些交互操作。比如,安装到某一步骤,会询问你是否执行该步骤。
现在需要通过PowerShell进行自动化升级,也就是目标exe通过PowerShell执行。

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的延津网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

比较友好的做法可以参考winrm的配置,会提供一个[quiet]参数,或者说参数可以通过外部传入也是可以的。

但是,假如目标exe确实没有提供额外参数,我们该如何自动话执行呢?

转化问题

上面的问题转化为搜索引擎可识别的问题就是“如何让PowerShell在需要确认的时候自动输入?”
换成英语再这么一google
https://stackoverflow.com/questions/14071012/how-do-i-automatically-answer-yes-to-a-prompt-in-powershell

这个问题下,出去PowerShell本身命令通过-Confirm:$false可以关闭之后,其他回答基本都是:

ECHO Y | TARGET.exe

这个ECHO一看就是个alias,我们看看它的面目

通过管道,我们把ECHO Y的输出作为TARGET.exe的输入。

举例子

新建TEST.PS1

$confirmation = Read-Host "Are you Sure You Want To Proceed?"
if ($confirmation -eq 'y') {
    "GO!!!"
}

执行:

我们执行的是PowerShell.exe,TEST.PS1作为其参数

那如果脚本中出现多次确认呢?

$confirmation = Read-Host "Are you Sure You Want To Proceed?"
if ($confirmation -eq 'y') {
    "GO!!!"
}

$confirmation = Read-Host "Are you Sure You Want To Proceed2?"
if ($confirmation -eq 'n') {
    "GO2!!!"

    $confirmation = Read-Host "Are you Sure You Want To Proceed3?"
    if ($confirmation -eq 'y') {
        "GO3!!!"
    }
}


我们输入的"y"只作用了第一次的询问。
即使,输入的"y"能作用于所有的询问,也是有问题的,多次询问中,我们有时候需要回复"y",有时候需要回复"n"。
...
没啥思路,也不好找关键词搜索
开个脑洞,传入数组进去看看如何?

天不生我XXX,PowerShell万古如长夜。


网页名称:PowerShell自动回复执行文件的询问-创新互联
网页地址:http://njwzjz.com/article/ddpopg.html