My Powershell 2.0 😕 script is installing an MSI package using something like the following excerpt.
(...)
msiexec.exe /norestart /qn /passive `
/l*v "$Dir\Install.log" `
/i "$dirTemp\$msi" `
INSTALLFOLDER="$Dir"
(...)
It runs successfully, but I would like the script to wait for the installation to end before proceeding to the next instructions.
Is there a way to force the script to wait msiexec
to finish?
20220909 EDIT: Tried suggested answer ⬇️
As suggested, I've tried Start-Process
as shown bellow.
$Dir = "c:\test"
$dirTemp = $env:TEMP
$msi = "package.msi"
$proxy = "1.2.3.4"
$metadata = "value"
$argList = @('/norestart',
'/qn',
'/passive',
'/l*v',
"$Dir\Install.log",
'/i',
"$dirTemp\$msi",
"INSTALLFOLDER='$Dir'",
"LOGFILE='$Dir\Agent.log'",
"SERVER='$proxy'",
"BUFFERFILE='$Dir\Agent.db'",
"METADATA='windows $metadata'")
Start-Process msiexec.exe -ArgumentList "$argList" -Wait -PassThru
By using Start-Process, Windows Installer fails to start and only shows me the msiexec
"help" window.
I could not find a syntax error. Also, there's no logs to be found at the appointed log directory.
Thank you
20220910 EDIT: Found the issue ⬇️
I had to change the single quotation marks from one of the parameters to a double quotation and scape them.
"METADATA=`"windows $metadata`""
It seems msiexec
did not like the space inside the parameter's value.
PS2 also has the cmdlet start-process if I remember correctly. There you can specify the parameter "-wait":
$argumentList = @(
'/norestart'
'/qn'
'/passive'
'/l*v'
"$Dir\Install.log"
'/i'
"$dirTemp\$msi"
"INSTALLFOLDER='$Dir'"
)
$result = start-process msiexec.exe -ArgumentList $argumentList -Wait -PassThru