wake-up-neo.com

Führen Sie MsiExec in PowerShell aus, und erhalten Sie den Rückkehrcode

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

Mit VBScript kann ich mit der Wscript.Shell object Run() Methode das Ergebnis folgendermaßen erhalten:

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

Wie kann ich das mit PowerShell tun?

27
Skatterbrainz

Ich würde das in Start-Process einpacken und die ExitCode-Eigenschaft des resultierenden Prozessobjekts verwenden. Zum Beispiel

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

oder

$?

je nachdem, was du willst. Ersteres ist eine ganze Zahl, letzteres ist nur ein Boolean. Außerdem wird $LastExitCode nur für ausgeführte native Programme ausgefüllt, während $? im Allgemeinen angibt, ob der letzte Befehl erfolgreich ausgeführt wurde oder nicht.

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
18
Joey

Sie können auch das Powershell-App-Bereitstellungskit verwenden, das verschiedene Funktionen bietet.

Dann können Sie zum Beispiel verwenden

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

info http://psappdeploytoolkit.com/

0
Johan A.