如何使用 SCCM 服务器推送带参数的 MSI

How to push MSI with parameter using SCCM server

我想使用 SCCM 服务器推送带参数的 MSI 安装程序。即

msiexec.exe /i "setup.msi" INSTALLFOLDER="SpecifiedInstallationLocation" CONFIGFILE="FileName"

我可以使用我定义的参数名称还是必须在命令行中使用特定的参数名称? 传递参数有什么特定的格式吗? 我可以将参数传递给 MSI 安装程序吗?

如果我在批处理文件中使用相同的命令,那么它将正常工作。

您可以在 msiexec.exe 命令行上设置两种一般类型的属性:

  1. 此处列出的public属性,public表示大写。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa370905(v=vs.85).aspx

实际上并没有那么多可以设置的东西。

  1. 安装在设计时接受的 public 属性。例如,如果安装程序有一个 UI 接受文本框值 属性 名称 SERVERTHING,则安装应设计为在静默安装中接受命令行上的 SERVERTHING。根据使用的目录名称,其他流行的选择是 INSTALLFOLDER 或 TARGETDIR 来设置默认的主应用程序文件夹。因此,如果该安装旨在期望在命令行上设置 CONFIGFILE 它应该可以工作,但它与 运行 一个程序并给它一堆参数相同:如果程序没有编码来处理他们然后他们没有效果。

一般来说,有关 SCCM 或公司部署工具的问题在 StackExchange 系统管理员站点 serverfault.com 上可能会得到更好的回答。部署是开发的重要组成部分。

不过,以后请尽量把问题弄清楚和具体,并给 serverfault.com 一个像这样的话题。


除了 Phil 的建议:当通过 SCCM 推出包时,您不仅限于 在命令行上设置属性您可以还可以使用 transforms 在原始 MSI 文件中配置任何你想要的东西。转换只是在安装时应用于原始 MSI 的数据库片段(更改集)。

设置命令行参数(大写PUBLIC属性)是“轻量级”配置安装的方式微星文件。您只能设置由 MSI 文件本身公开和定义的属性(您不能 "invent" 您自己的参数)。 Transforms 是配置 MSI 包的“重量级”方式 - 您基本上可以更改整个包中的任何内容(通常用于公司部署).

此处有关于设置属性和使用转换的详细说明:How to make better use of MSI files。也许快速浏览一下,可能会有所帮助。我觉得至少比上面描述的要好

为每个 MSI 查找可配置 PUBLIC 属性的过程通常包括打开 MSI 并检查 Property table. Most of the time the property will be listed there, but it also happens that a property is defined only in the GUI dialogs (indicates a poorly designed MSI). You can inspect all of this using an MSI file viewer such as Orca (or another, third party tool)。供应商的网页还可能包含有关如何在公司环境中静默部署其 MSI 的说明。给他们发一封电子邮件并向他们询问信息通常是个好主意。可能有您不知道的配置选项。我过去常常为我的设置提供一页 "Large Scale Deployment" PDF 格式的指南。

一个特殊的障碍是某些 MSI 文件设计不当,当 运行 处于静默模式 (当整个 GUI 处于跳过 - 这是 SCCM 所做的)。解决 MSI 文件中的这些设计错误可能非常令人头疼。这不是您所看到的问题的原因。您可以在此处找到有关此问题的一些信息:Uninstall from Control Panel is different from Remove from .msi.

总而言之:

  • 您可以在 Property table 的 MSI 中找到 可配置的 PUBLIC 属性,有时在设置 GUI 对话框中(通过 GUI 输入设置的属性或更改).
  • 只能在 msiexec.exe 命令行中设置大写 PUBLIC 属性。
  • 为了使事情更加复杂,有一个特殊的 属性,它定义了一个 public 属性的列表,这些属性允许在安全环境中传递到延迟(静默)安装模式(具有提升权限的托管安装- AD 设置):SecureCustomProperties。根据经验,使用转换将您在命令行设置的任何属性添加到此安全属性列表。如果您在没有安装的情况下看到安装问题(并且您的网络是托管的 - 一个在安装过程中具有提升权限的域),则尤其如此。
  • 你不能有意义地自己定义新参数并在命令行上设置它们,但你可以使用 transforms 来改变原始 MSI 中你想要的任何东西,如果你知道怎么做。通常这需要专业的 MSI 知识才能成功完成(application repackagers / setup developers)。
  • 与应用程序/设置供应商联系以获取有关静默部署的信息始终是一个好主意。他们可能有一个单页文档可以解决您的所有问题。
  • 某些 MSI 文件存在设计缺陷,当 运行 静默时会导致安装错误。通常,这涉及仅在设置 GUI 序列中执行安装任务的设置(当设置 运行 静默时会跳过 - 这是一个非常严重的 MSI 设计错误,但太常见了)。

冗长而且有点乱,但我希望这个建议和 Phil 的建议能帮助你实现你想要的。

如果使用 MST 而不是参数会更好。但如果你做不到这一点,那么 SCCM 完全支持 public 属性。只需将整个命令放入 "Installation Program" 您已经有了 msiexec 命令的一部分,默认情况下 SCCM 会添加“/q”以进行完全安装。如果您的 属性 值有空格,请注意引号的焦点。