我正在开发一个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
安装目录周围的双引号
由于
答案 0 :(得分:4)
除非您需要使用提升的权限运行进程,否则不要为Start-Process
而烦恼。请改用call operator和splatting。该命令的退出代码存储在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