重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
客户有个升级包,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万古如长夜。