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?

È stato utile?

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"
  

http://psappdeploytoolkit.com/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top