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?
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
$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
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"