2010-11-08 11 views
27

Mit BAT/CMD Skript kann ich einfach "msiexec /i <whatever.msi> /quiet /norestart" und dann überprüfen Sie %errorlevel% für das Ergebnis.Führen Sie MsiExec von PowerShell und erhalten Return Code

Mit VBScript, mit der Wscript.Shell Objekt Run() Methode kann ich das Ergebnis wie folgt erhalten:

"result = oShell.Run("msiexec /i ...", 1, True)" 

Wie kann ich dies tun, mit Powershell?

+0

irgendein Beispiel mit vollem Quellcode? – Kiquenet

Antwort

48

Ich würde dies in Start-Prozess einbetten und die ExitCode-Eigenschaft des resultierenden Prozessobjekts verwenden. Zum Beispiel

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode 
+0

Das habe ich gesucht! Es ist jedoch "ArgumentList" nicht "ArgumentsList", aber auf jeden Fall hast du die Frage beantwortet - danke! – Skatterbrainz

+0

Haa..das war ein Tippfehler. Ich habe gerade meine Antwort bearbeitet. – ravikanth

+2

Anmerkungen; 1.In der zitierten -ArgumentList sind Argumente durch Leerzeichen getrennt und einfache Anführungszeichen können verwendet werden, um Elemente wie einen Pfad mit Leerzeichen im Namen zu halten. 2.ExitCode wird nur verfügbar, wenn alle erzeugten Fenster geschlossen sind; 3. Ich bin auf PS v4.0. – AnneTheAgile

18
$LastExitCode 

oder

$? 

je nachdem, was Sie nach. Ersteres ist eine Ganzzahl, letzteres nur ein Boolescher Wert. Darüber hinaus wird $LastExitCode nur für native Programme gefüllt, die ausgeführt werden, während $? allgemein angibt, ob der letzte Befehlslauf erfolgreich war oder nicht - daher wird er auch für Cmdlets festgelegt.