2016-07-20 94 views
1

Ich versuche, ein Powershell-Skript auszuführen, um eine Anwendung mit msiexec.exe zu installieren.Lassen Sie msiexec warten, bis die Installation abgeschlossen ist

msiexec.exe/a "C: \ Users \ tempuser \ Desktop \ AppInstall.msi"/passive Warte

Also habe ich die Installation wollen, bevor er auf den Rest der Befehle abgeschlossen werden um den ganzen Automatisierungsprozess zu verhindern.

Sobald ich mein Skript ausführen, erscheint ein Windows-Installer-Menü, das alle msiexec-Optionen anzeigt. Ich denke, ich habe den Warteparameter falsch am Ende der Zeile verwendet. Ich habe schon so viel nach irgendwelchen Lösungen gegoogelt ... Ich würde mich über jede Hilfe freuen.

Antwort

1

können Sie

$myJob = Start-Job {[your msiexec call]} 
Wait-Job $myJob 

Oder

$params = @{ 
     "FilePath" = "$Env:SystemRoot\system32\msiexec.exe" 
     "ArgumentList" = @(
     "/x" 
     "$($productCodeGUID)" 
     "/qn" 
     "REMOVE=ALL" 
     "/norestart" 
     ) 
     "Verb" = "runas" 
     "PassThru" = $true 
    } 

    $uninstaller = start-process @params 
    $uninstaller.WaitForExit() 

die params Tweak verwenden, um Ihre Bedürfnisse anzupassen. Ich mag den zweiten Ansatz, da er die Argumente in langwierigem Code leichter lesbar macht.

Das Ausführen als ein Prozess oder Auftrag kann für Sie keinen Unterschied machen, aber wenn sie dies tun, dann wählen Sie einfach den, der am besten Ihren Bedürfnissen entspricht.