【问题标题】:Converting msiexec command from cmd to powershell将 msiexec 命令从 cmd 转换为 powershell
【发布时间】:2025-12-26 01:55:11
【问题描述】:

在我的powershell 脚本中,我需要安静地运行几个msiexec 命令。问题是当我尝试运行命令时,Windows Installer 帮助弹出窗口显示而不是执行命令。 (下图)

相同的命令在 cmd 中运行良好。下面是我的命令。我将命令中的& 保留在双引号中,以将其视为建议的字符串。

& msiexec /log c:\msxml.log /quiet /I "&" D:\LoadGeneratorsetup\prerequisites\msxml6\msxml6_x64.msi

我尝试使用Start-Process -FilePath 运行它,但最终出现以下错误。

Start-Process : A positional parameter cannot be found that accepts argument 'c:\msxml.log'.
At line:1 char:1
+ Start-Process -FilePath msiexec /log c:\msxml.log /quiet /I "&" D:\Lo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Start-Process], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

有人可以提供有关如何使用 powershell 安静地执行命令的详细信息。

【问题讨论】:

  • 只需去掉开头的“&”和 & 所以 :: msiexec /log c:\msxml.log /quiet /ID:\LoadGeneratorsetup\prerequisites\msxml6\msxml6_x64.msi
  • 谢谢欧文。它在删除 & 后工作。但是最后一个msiexec 仍在弹出Windows Installer 弹出窗口。该命令如下所示 - & msiexec /i "& D:\LoadGeneratorsetup\HP_LoadGenerator.msi" /qb /l*vx "& D:\LoadGeneratorsetup\Logs\InstallationLogs"+"_"+(Get-Date -Format "yyyy-MM-dd-hh-mm-s")+".txt" 我尝试删除所有 & 但仍然相同。你能帮帮我吗?
  • 检查我的答案
  • 请在下面查看我的答案以获取指向the Windows Installer PowerShell Module的一些链接。

标签: powershell scripting windows-installer


【解决方案1】:

第二个命令:

& msiexec /i "& D:\LoadGeneratorsetup\HP_LoadGenerator.msi" /qb /l*vx "& D:\LoadGeneratorsetup\Logs\InstallationLogs"+"_"+(Get-Date -Format "yyyy-MM-dd-hh-mm-s")+".txt"

您有两个选择,将日志路径设置为变量或将路径括起来:

1 - 设置为变量

$logfile = "D:\LoadGeneratorsetup\Logs\InstallationLogs" + "_" + (Get-Date -Format "yyyy-MM-dd-hh-mm-s") + ".txt"
msiexec /i "D:\LoadGeneratorsetup\HP_LoadGenerator.msi" /qb /l*vx $logfile

2 - 将路径括起来

msiexec /i "D:\LoadGeneratorsetup\HP_LoadGenerator.msi" /qb /l*vx ("D:\LoadGeneratorsetup\Logs\InstallationLogs" + "_" + (Get-Date -Format "yyyy-MM-dd-hh-mm-s") + ".txt")

我假设该命令只是在运行命令之前没有评估日志路径。

【讨论】:

  • 是的,你是对的。我只是尝试给出一个静态文件名并且它有效。感谢欧文的帮助。我将使用上述任何选项并设置文件名。
  • Owain - 一个查询 - 命令 & D:\LoadGeneratorsetup\prerequisites\vc2005sp1_mfc_security_update_x86\vcredist_x86.exe /q:a /c:"msiexec /i vcredist.msi /qn"" " 正在执行,没有任何错误,但没有安装。当我在cmd中运行相同的,它的执行和安装。命令中的msiexec 是否使其无法在 PS 中执行?请澄清。
【解决方案2】:

我想提醒您注意 github.com 上的 Windows Installer PowerShell Module。向下滚动此首页以获取说明和一些示例,see releases tab for download。我没有真正测试过它,但它来自Heath Stewart - Microsoft 高级软件工程师 (github)。

简短的内嵌示例

install-msiproduct .\example.msi -destination (join-path $env:ProgramFiles Example)

一些附加链接

【讨论】:

  • 谢谢,会调查的。如果你能在这个命令上帮助我..D:\LoadGeneratorsetup\prerequisites\vc2005sp1_mfc_security_update_x86\vcredist_x86.exe /q:a /c:"msiexec /i vcredist.msi /qn"" " 在 cmd 中完美运行,但在 powershell 中却不行。我有一个类似的命令(命令中的 2008 代替 2005),它在 cmd 和 PS 中都运行良好。不知道我在这里错过了什么。
  • 对此不熟悉,但您为什么不直接以静默模式运行vcredist_x86.exe,正如您在执行vcredist_x86.exe /? 并获取命令行选项时所解释的那样?不确定您是否需要处理 MSI。
  • 我试过D:\LoadGeneratorsetup\prerequisites\vc2005sp1_mfc_security_update_x86\vcredist_x86.exe /quiet /norestart,但它说“命令行选项语法错误”所以它正在寻找参数
  • 抱歉,目前无法调查此问题。 Maybe have a quick look at this.
  • 太棒了。惯例是为基本上不相关的“后续”问题创建一个新问题——也许考虑到未来——这里有很多关于 SO 的节制。很高兴这个简单的链接有所帮助!