You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Start-Process和msiexec批量自动安装MSI文件?

解决MSI文件批量安装的PowerShell脚本问题

错误原因分析

1. Start-Process参数传递错误

Start-Process msiexec -argumentlist /i $ODBC17 -wait 报错的核心原因是:-ArgumentList 参数需要接收单个完整参数字符串或参数数组,你将/i和$ODBC17拆分为两个独立参数传入,导致PowerShell解析时判定为无效的位置参数。

2. 单引号导致变量未解析

使用单引号包裹参数(如'/i $ODBC17')时,PowerShell不会解析单引号内的变量$ODBC17,msiexec实际接收到的路径是字面量$ODBC17,自然无法找到对应的安装包文件。

3. 直接调用msiexec的参数错误

直接运行msiexec /i $ODBC17 -wait时,-wait并非msiexec的合法参数,且PowerShell可能以非交互模式启动进程,导致安装界面无法正常弹出。

正确的单个MSI安装代码

要正常触发安装界面,需将msiexec的参数正确封装后传递,同时确保变量被正确解析:

$softwarePath = "C:\folder1\folder2"
# 用Join-Path拼接路径,避免手动拼接时的符号错误
$ODBC17 = Join-Path -Path $softwarePath -ChildPath "msi01.msi"

# 正确调用:将所有参数合并为一个字符串,路径用双引号包裹处理空格场景
Start-Process -FilePath msiexec.exe -ArgumentList "/i `"$ODBC17`"" -Wait -NoNewWindow
  • -Wait确保脚本等待当前安装完成后再继续
  • -NoNewWindow确保安装界面在当前控制台会话中弹出(可根据需求移除)

批量安装文件夹内所有MSI的脚本

如果需要自动遍历文件夹内所有.msi文件并逐个安装,可使用以下脚本:

$softwarePath = "C:\folder1\folder2"

# 获取文件夹内所有MSI文件(仅文件,排除子目录)
$msiFiles = Get-ChildItem -Path $softwarePath -Filter "*.msi" -File

foreach ($msi in $msiFiles) {
    Write-Host "开始安装:$($msi.FullName)"
    Start-Process -FilePath msiexec.exe -ArgumentList "/i `"$($msi.FullName)`"" -Wait -NoNewWindow
    Write-Host "完成安装:$($msi.FullName)`n"
}
  • Get-ChildItem自动筛选所有目标MSI文件,无需手动指定文件名
  • 循环内逐个执行安装,确保安装顺序和完整性

内容的提问来源于stack exchange,提问作者Claire Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:31:04