Powershell Call MSI with Arguments

后端 未结 5 477
旧巷少年郎
旧巷少年郎 2020-12-07 04:09

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.

相关标签:
5条回答
  • 2020-12-07 04:34

    Any luck with storing the entire argument in a variable then passing it to start-process?

    example:

    $argument = "/i $dirFiles\ABDS2017\Img\x64\RVT\RVT.msi INSTALLDIR='C:\Program Files\Autodesk\' ADSK_SETUP_EXE=1 /qb!"
    (start-process msiexec.exe -argumentlist $argument).ExitCode
    
    0 讨论(0)
  • 2020-12-07 04:43

    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
    
    0 讨论(0)
  • 2020-12-07 04:46

    I figured out the answer. Double Quotes around the path for installdir fixed it for me.

    Thanks

    (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
    
    0 讨论(0)
  • 2020-12-07 04:49

    Don't bother with Start-Process unless you need to run a process with elevated privileges. Use the call operator and splatting instead. The exit code of the command is stored in the automatic variable $LastExitCode.

    $params = '/i', "$dirFiles\ABDS2017\Img\x64\RVT\RVT.msi",
              'INSTALLDIR="C:\Program Files\Autodesk"', 'ADSK_SETUP_EXE=1',
              '/qb!'
    & msiexec.exe @params
    $LastExitCode
    

    Unfortunately you cannot tell msiexec.exe to wait for an installation to complete, and the call operator also doesn't enforce synchronous execution. If you need to wait for the installation to complete before proceeding you need something like the CMD-builtin start command or Start-Process. I would still recommend defining the parameters as an array, though.

    $params = '/i', "$dirFiles\ABDS2017\Img\x64\RVT\RVT.msi",
              'INSTALLDIR="C:\Program Files\Autodesk"', 'ADSK_SETUP_EXE=1',
              '/qb!'
    $p = Start-Process 'msiexec.exe' -ArgumentList $params -NoNewWindow -Wait -PassThru
    $p.ExitCode
    
    0 讨论(0)
  • 2020-12-07 04:53

    This would be my recommendation for the first code snippet you provided, use single quotes inside of 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
    

    If this receives an error, you are missing an important parameter.

    0 讨论(0)
提交回复
热议问题