Frage

Mit BAT/CMD Skript kann ich einfach "msiexec /i <whatever.msi> /quiet /norestart" verwenden und dann überprüfen %errorlevel% für das Ergebnis.

Mit VBScript, das Wscript.Shell Objekt Run() Verfahren verwendet wird, kann ich das Ergebnis wie diese:

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

Wie kann ich das mit Powershell?

War es hilfreich?

Lösung

Das würde ich einpacken in Start-Prozess und verwenden Sie die Exitcode-Eigenschaft des resultierenden Prozessobjekts. Zum Beispiel

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

Andere Tipps

$LastExitCode

oder

$?

je nachdem, was Sie nach. Ersteres ist eine ganze Zahl, wobei die letztere nur eine Boolesche. Darüber hinaus ist $LastExitCode nur bevölkert für native Programme laufen zu sein, während $? im Allgemeinen, ob der Lauf erfolgreich war letzte Befehl teilt oder nicht -. So wird es auch für Cmdlets eingestellt wird

PS Home:\> cmd /c "echo foo"; $?,$LASTEXITCODE
foo
True
0
PS Home:\> cmd /c "ech foo"; $?,$LASTEXITCODE
'ech' is not recognized as an internal or external command,
operable program or batch file.
False
1

Sie können auch die Powershell-App Deployment Kit verwenden, die mehrere Dinge zur Verfügung stellt.

Dann können Sie zum Beispiel verwenden

Execute-MSI -Action 'Install' -Path "$dirFiles\your.msi" -AddParameters "INSTALLFOLDER=C:\$appFolder"
  

http://psappdeploytoolkit.com/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top