Powershell Call MSI with Arguments

Viewed 42962

I'm working on a powershell script to install Autodesk products and I am having some trouble.

I've tried this many different ways and keep running into errors.

Using double quotes

(Start-Process "msiexec.exe" -ArgumentList ""/i $dirFiles\ABDS2017\Img\x64\RVT\RVT.msi INSTALLDIR="C:\Program Files\Autodesk\" ADSK_SETUP_EXE=1 /qb!"" -NoNewWindow -Wait -PassThru).ExitCode

Error Cannot validate argument on parameter 'ArgumentList' Argument is null or empty.

Using a variable to define InstallDir

$RevitInstallDir = "C:\Program Files\Autodesk\"
    (Start-Process "msiexec.exe" -ArgumentList "/i $dirFiles\ABDS2017\Img\x64\RVT\RVT.msi INSTALLDIR=$RevitInstallDir ADSK_SETUP_EXE=1 /qb!" -NoNewWindow -Wait -PassThru).ExitCode

Doing this I get the msiexec /option Required Parameter error.

Tried this also, Single Quotes with Quotes on Path

(Start-Process "msiexec.exe" -ArgumentList "/i $dirFiles\ABDS2017\Img\x64\RVT\RVT.msi INSTALLDIR="C:\Program Files\Autodesk\" ADSK_SETUP_EXE=1 /qb!" -NoNewWindow -Wait -PassThru).ExitCode

I receive A positional parameter cannot be found that accepts argument C:\Program

Using single quotes on InstallDir

(Start-Process "msiexec.exe" -ArgumentList "/i $dirFiles\ABDS2017\Img\x64\RVT\RVT.msi INSTALLDIR='C:\Program Files\Autodesk\' ADSK_SETUP_EXE=1 /qb!" -NoNewWindow -Wait -PassThru).ExitCode

Doing this I get the msiexec /option Required Parameter error.

Using single quotes on the outside

(Start-Process "msiexec.exe" -ArgumentList '/i $dirFiles\ABDS2017\Img\x64\RVT\RVT.msi INSTALLDIR="C:\Program Files\Autodesk\" ADSK_SETUP_EXE=1 /qb!' -NoNewWindow -Wait -PassThru).ExitCode

If I do this, it prevents the $dirFiles variable from working.

The reason I'm using Start-Process is because I have many installers one after the other and I want one installer to wait till the one before it finishes. Any help would be appreciated! Thanks

EDIT: Nevermind, I figured it out.

(Start-Process "msiexec.exe" -ArgumentList "/i $dirFiles\ABDS2017\Img\x64\RVT\RVT.msi INSTALLDIR=""C:\Program Files\Autodesk\"" ADSK_SETUP_EXE=1 /qb!" -NoNewWindow -Wait -PassThru).ExitCode

Double Quotes around the Install Dir

Got the idea from here. https://blogs.technet.microsoft.com/heyscriptingguy/2015/06/20/weekend-scripter-understanding-quotation-marks-in-powershell/

Thanks

6 Answers

This worked for me, had the same issue

$exeScriptDir = $PSScriptRoot

Function installMSI {
    $msifile = "$exeScriptDir\3D Access\OSNME.msi"
    $msiargs = @(
        "/i"
        "`"$msifile`""
        'INSTALLDIR="C:\PRGS\PTC\Creo Elements\Direct 3D Access 20.1\"'
        "MELS=LOCALHOST"
        "/qn"
    )
    $installcommand = (start-process msiexec.exe -ArgumentList $msiargs -wait -PassThru)
}   

installMSI 

In order to understand how to "quote" the parameters for start-process here is a sample of code to start the unattended installation of vmtools

the command i wanted to run in a powershell:

setup.exe  /l /v"/qn REBOOT=R ADDLOCAL=ALL REMOVE=Hgfs,Unity,BootCamp,SVGA"

The powershell sample:

Start-Process -FilePath "$vmtoolspath\setup.exe" -ArgumentList "/l /v ""/qn REBOOT=R ADDLOCAL=ALL REMOVE=Hgfs,Unity,BootCamp,SVGA"" " -Wait
Related