Is there a way to make powershell wait for an install to finish?

回眸只為那壹抹淺笑 提交于 2019-12-21 04:52:17

问题


I have a list of Windows packages that I'm installing via powershell using the following command:

& mypatch.exe /passive /norestart

mypatch.exe is being passed from a list and it doesn't wait for the prior install to finish - it just keeps going. It builds up a huge window of installs that are pending installation. Also, I can't use $LASTEXITCODE to determine if the install succeeded or failed.

Is there anyway to make the installs wait before starting the next?


回答1:


Start-Process <path to exe> -Wait 



回答2:


Sure, write a one line batch script that runs the installer. The batch script will wait for the installer to finish before returning. Call the script from PowerShell which will in turn wait for the batch script to finish.

If you have access to how mypatch is written, you could have that create some random file when it completes that PowerShell can check for its existence in a while loop and just sleeps while the file doesn't exist.

If you don't, you could also have that batch script create a dummy file when the installer completes.

Yet another way, though probably the worst of all of these is to just hard-code a sleep timer (start-sleep) once you call the installer.

EDIT just saw JensG's answer. Didn't know about that one. Nice




回答3:


JesnG is correct in using start-process, however as the question showed passing arguments, the line should be:

Start-Process "mypatch.exe" -argumentlist "/passive /norestart" -wait

The OP also mentioned determining if the install succeeded or failed. I find that using a "try, catch throw" to pick up on error states works well in this scenario

try {
    Start-Process "mypatch.exe" -argumentlist "/passive /norestart" -wait
} catch {
    # Catch will pick up any non zero error code returned
    # You can do anything you like in this block to deal with the error, examples below:
    # $_ returns the error details
    # This will just write the error
    Write-Host "mypatch.exe returned the following error $_"
    # If you want to pass the error upwards as a system error and abort your powershell script or function
    Throw "Aborted mypatch.exe returned $_"
}


来源:https://stackoverflow.com/questions/19410644/is-there-a-way-to-make-powershell-wait-for-an-install-to-finish

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!