我正在尝试使用 Powershell 自动执行一些流程并在这里和那里浏览一下,我整理了一个小的 .ps1 文件,允许我在下一个可用驱动器上安装 Iso 映像,将所选驱动器存储为变量,并使用它来检索 ISO 上的安装文件(还需要正确安装 .xml)。
$mountResult = Mount-DiskImage C:\My_iso_path\my_iso_file.iso -PassThru
$driveLetter = ($mountResult | Get-Volume).DriveLetter
& "${DriveLetter}:\the_setup_file_onmy_iso.exe" /config "C:\the_xml_config_file.xml"
Dismount-DiskImage -ImagePath C:\My_iso_path\my_iso_file.iso
在我尝试使用最后一个字符串卸载图像之前,脚本工作正常,但是每当我按原样运行代码时,设置都会失败,因为磁盘在进程完成之前就被卸载了。
有什么办法可以让这一切正常进行吗? (比如,idk,也许是等待功能?)
运行后尝试使用
Wait-Process
命令:
& "${DriveLetter}:\the_setup_file_onmy_iso.exe" /config "C:\the_xml_config_file.xml"
当您使用调用
&
运算符运行 GUI 应用程序时,该调用是 asynchronous(与运行命令行应用程序相反,它以 synchronously 运行)。这意味着 PowerShell 继续下一行而不等待启动的应用程序完成。
Start-Process
和参数 -Wait
:
Start-Process -Wait -Path "${DriveLetter}:\the_setup_file_onmy_iso.exe" -ArgumentList '/config "C:\the_xml_config_file.xml"'
注意: 在某些情况下,当 seup 进程启动一个分离的子进程时,您仍然会得到异步行为,因为
Start-Process
不会等待子进程。