Powershell使用参数调用MSI

时间:2017-07-20 18:51:48

标签: powershell

我正在开发一个PowerShell脚本来安装Autodesk产品,我遇到了一些麻烦。

我尝试了很多不同的方法并且一直遇到错误。

使用双引号

(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

错误无法验证参数'ArgumentList'上的参数参数为null或为空。

使用变量定义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

这样做我得到了msiexec /选项必需参数错误。

也试过这个,带引号的单引号

(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

我收到无法找到接受参数C:\ Program

的位置参数

在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

这样做我得到了msiexec /选项必需参数错误。

在外面使用单引号

(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

如果我这样做,它会阻止$ dirFiles变量起作用。

我使用Start-Process的原因是因为我有一个接一个的安装程序,我希望一个安装程序等到它完成之前。任何帮助,将不胜感激!感谢

编辑:没关系,我明白了。

(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

安装目录周围的双引号

从这里得到了想法。 https://blogs.technet.microsoft.com/heyscriptingguy/2015/06/20/weekend-scripter-understanding-quotation-marks-in-powershell/

由于

6 个答案:

答案 0 :(得分:4)

除非您需要使用提升的权限运行进程,否则不要为Start-Process而烦恼。请改用call operatorsplatting。该命令的退出代码存储在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

很遗憾,您无法告诉msiexec.exe等待安装完成,并且调用操作员也不会强制执行同步执行。如果您需要等待安装完成后再继续操作,则需要使用CMD-builtin start命令或Start-Process。不过,我仍然建议将参数定义为数组。

$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

答案 1 :(得分:1)

这对我有用,有同样的问题

$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 

答案 2 :(得分:0)

将整个参数存储在变量中然后将其传递给start-process会不会有好运?

示例:

$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

答案 3 :(得分:0)

这是我对您提供的第一个代码段的建议,在双引号内使用单引号...

(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

如果收到错误,则表示您缺少重要参数。

答案 4 :(得分:0)

我想出了答案。针对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

答案 5 :(得分:0)

为了了解如何“引用”启动过程的参数 这是开始无人值守安装vmtools的代码示例

我想在Powershell中运行的命令:

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

powershell示例:

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