关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回

PowerShell自动回复执行文件的询问

发布时间:2022-07-27 13:54:13

场景

客户有个升级包,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万古如长夜。


/template/Home/DawnNew/PC/Static

立即注册风纳云账号,免费体验多款产品

立即注册