Eseguire MsiExec da PowerShell e ottenere il codice restituito
-
29-09-2019 - |
Domanda
Con sceneggiatura BAT/CMD
posso semplicemente utilizzare "msiexec /i <whatever.msi> /quiet /norestart"
e quindi controllare %errorlevel%
per il risultato.
Con VBScript
, utilizzando il metodo oggetto Wscript.Shell
Run()
, posso ottenere il risultato come questo:
"result = oShell.Run("msiexec /i ...", 1, True)"
Come posso fare questo con PowerShell?
Soluzione
Vorrei concludere che fino in Start-Process e utilizzare la proprietà ExitCode dell'oggetto processo risultante. Ad esempio
(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
Altri suggerimenti
$LastExitCode
o
$?
a seconda di ciò che stai cercando. Il primo è un numero intero, quest'ultimo solo un booleana. Inoltre, $LastExitCode
è popolato solo per i programmi nativi in ??esecuzione, mentre $?
dice in generale se l'ultima esecuzione di comando ha avuto successo o no -. Così sarà anche essere impostato per i cmdlet
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
È inoltre possibile utilizzare il kit di distribuzione PowerShell app che fornisce diverse cose.
Quindi è possibile utilizzare, ad esempio
Execute-MSI -Action 'Install' -Path "$dirFiles\your.msi" -AddParameters "INSTALLFOLDER=C:\$appFolder"