Powershell 如何检测任务(安装)或新弹出对话框的完成情况

Powershell 如何检测任务(安装)或新弹出对话框的完成情况,powershell,Powershell,我编写了一段代码,用于执行完成安装的可执行文件。我失败的代码部分是,我以秒为单位给出了时间段,以便安装将在该时间段内完成,然后按Enter键完成安装 但它一点也不可靠,因为安装速度取决于机器的处理器速度,我必须在不同的机器上使用此代码,因此,如果安装需要20秒,而我给了15秒,那么在安装完成之前需要输入键盘,这将单击对话框中的“取消”,安装未完成即终止 PowerShell是否有办法检测新的弹出对话框,或者检查进程是否完成,然后执行程序的其余部分 $InstallFile = "D:\File

我编写了一段代码,用于执行完成安装的可执行文件。我失败的代码部分是,我以秒为单位给出了时间段,以便安装将在该时间段内完成,然后按Enter键完成安装

但它一点也不可靠,因为安装速度取决于机器的处理器速度,我必须在不同的机器上使用此代码,因此,如果安装需要20秒,而我给了15秒,那么在安装完成之前需要输入键盘,这将单击对话框中的“取消”,安装未完成即终止

PowerShell是否有办法检测新的弹出对话框,或者检查进程是否完成,然后执行程序的其余部分

$InstallFile = "D:\File for installation\folder\file.exe"
Start-Process $InstallFile
$wshell = New-Object -ComObject WScript.Shell;
$wshell.AppActivate($InstallFile)
Sleep 1
$wshell.SendKeys('')
Sleep 1
$wshell.Sendkeys('')
$wshell.SendKeys(" ")
$wshell.SendKeys("{TAB}")
$wshell.SendKeys("{TAB}")
$wshell.SendKeys('')
Sleep -s 10
$wshell.SendKeys('')
Sleep -s 5

你的问题没有通用的解决方案。执行无人参与安装的最佳方式取决于您正在运行的安装程序类型以及安装程序提供的选项。如果安装程序实际关闭,或者启动另一个进程。您可以编写一些内容来监视pid是否消失。请尝试运行
file.exe/?
,因为这显示了大多数安装程序的命令行选项。如果它是一款商业软件,那么值得查看制造商网站,看看它是否支持无人值守安装。此外,谷歌搜索“软件名无人参与安装”或“软件名静默安装”也值得一试。您可以通过
user32.dll
并使用与windows交互的方法来查找窗口。实际上我知道流程,但要检测操作完成或检测新的对话框弹出框,则需要完成。我将根据安装过程对流程进行编码,dat不是我真正关心的问题。