web-dev-qa-db-fra.com

Exécutez MsiExec à partir de PowerShell et obtenez le code de retour

Avec le script BAT/CMD, je peux simplement utiliser "msiexec /i <whatever.msi> /quiet /norestart", puis vérifier %errorlevel% pour obtenir le résultat.

Avec VBScript, en utilisant la méthode Wscript.Shell object Run(), je peux obtenir le résultat suivant:

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

Comment puis-je faire cela avec PowerShell?

27
Skatterbrainz

Je voudrais envelopper cela dans Start-Process et utiliser la propriété ExitCode de l'objet de processus résultant. Par exemple

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

ou

$?

en fonction de ce que vous recherchez. Le premier est un entier, le dernier juste un booléen. De plus, $LastExitCode n'est rempli que pour les programmes natifs en cours d'exécution, alors que $? indique généralement si la dernière commande a été exécutée avec succès ou non. Elle sera donc également définie pour les cmdlets.

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

Vous pouvez également utiliser le kit de déploiement d’application PowerShell qui fournit plusieurs choses.

Ensuite, vous pouvez utiliser par exemple

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

info http://psappdeploytoolkit.com/

0
Johan A.