如何使用 powershell 运行安装程序?

Posted

技术标签:

【中文标题】如何使用 powershell 运行安装程序?【英文标题】:How can I use powershell to run through an installer? 【发布时间】:2018-02-23 14:35:21 【问题描述】:

我正在尝试安装一个软件,当手动完成时,它具有配置选项,您可以在完成该过程时从中进行选择。我正在尝试找出一种使用 powershell 自动执行此操作的方法,但对于如何设置这些配置选项感到困惑。我相信我需要在安装程序 .exe 上运行 start-process 命令,但我不知道从那里去哪里。我可以使用 start-process 命令上的参数来传递我想要的配置吗?

【问题讨论】:

您要安装什么应用程序? 每个安装程序都不同,某些类型您可以传递标志和参数。有些你可以提供答案文件。有些您必须在安装过程中提供主机输入。如果不知道具体的安装程序以及它在寻找什么,就无法回答您的问题。 我正在尝试使用他们的安装程序升级 teamcenters 社区协作 我写了一个非常“通用的答案”,试图回答一般如何部署此类软件 - 希望以后我可以“重用”一个答案。请尝试在未来写得更具体,更清楚地说明您想要实现的目标。如果问题难以回答,问题会在 *** 上积极关闭,并且您的主题可能会在 serverfault.com(系统管理员站点)上得到更好的覆盖。话虽如此,欢迎来到*** :-)。 【参考方案1】:

更新:底部有几个链接,其中包含有关如何处理安装配置的信息文件提取 用于 setup.exe 文件。

更新:请参阅 github.com 上的 Windows Installer PowerShell Module(向下滚动查看描述,使用 发布标签下载)。我还没有真正测试过它,但它来自Heath Stewart - Microsoft 高级软件工程师 (github)。


我快速查找了该安装程序,但并不容易找到。 安装程序基本上是 Windows Installer 数据库 (MSI) 或其他东西 - 通常是某种 setup.exe。 MSI 数据库也可以封装在 setup.exe 中。

您应该知道,对于传统风格的安装程序,大规模部署的常见做法是使用an application repackager tool 捕获传统安装,然后编译一个 MSI 文件以用于安装(有效地转换从旧格式到现代 MSI 格式的安装程序)。这是一项专业任务,需要对 Windows 和设置有很好的了解。它通常在大型公司中针对非常大型的软件发行版进行。 如果您在一家大公司工作,可能会有一个团队专门负责打包您提到的软件。也许与您的管理层核实。如果设置是 MSI,则同一团队也可以根据您的规范为您修改。


关于您的安装程序 EXE。尝试从命令行运行setup.exe /a,看看您是否可以选择将文件提取到“网络安装点”(管理安装)。然后您正在处理一个包含在 setup.exe 中的 MSI 文件。如果这不起作用,您也可以尝试setup.exe /xsetup.exe /extract

Windows Installer 具有内置功能,允许您通过在命令行中设置的 PUBLIC 属性(大写)或通过 transform 应用来自定义安装(Windows Installer 将大量更改应用于供应商文件的机制 - 它是在运行时从供应商处应用于安装数据库的部分数据库)。

非 MSI 的传统安装程序技术通常具有较少的自定义安装设置的可靠方法,而且当它们存在时,它们往往是相当临时的。特别是静默运行和卸载可能是缺少或执行不佳的功能。这些安装通常都以 EXE 格式包装,并且有许多用于生成它们的工具 - 每个都有自己的怪癖和功能。

换句话说,这完全取决于安装程序的实现方式。试一试setup.exe /a,并为我们提供新信息更新您的答案(不要添加太多 cmets - 我们会回来查看)。


关于使用 PowerShell。老实说,到目前为止,我还没有使用 PowerShell 进行部署。下面是如何使用 PowerShell 安装的基本说明:https://kevinmarquette.github.io/2016-10-21-powershell-installing-msi-files/

您还可以从 PowerShell 为 MSI 文件调用自动化,我认为这与您的要求无关,但这里有一个用于修改转换文件的快速链接:http://www.itninja.com/question/ps-how-to-edit-a-mst-file。

安装 MSI 文件的常规方法是通过 Window 的内置 msiexec.exe 命令行。安装软件的基本 msiexec.exe 命令行是:

msiexec.exe /I "C:\Your.msi" /QN /L*V "C:\msilog.log" TRANSFORMS="C:\1031.mst;C:\My.mst"

快速参数说明:

/I = run install sequence
/QN = run completely silently
/L*V "C:\msilog.log" = verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst (see below).

什么是转换?在此解释:How to make better use of MSI files。

高级安装程序msiexec.exe command lines 上有一个常规页面。这里是Microsoft's msiexec.exe documentation on MSDN


一些链接:

或许可以在此处查看 Michael Urman 的回答:Programmatically extract contents of InstallShield setup.exe。这仅适用于 Installshield 打包的 EXE 文件。 Installshield setup.exe commands(带有一些示例命令行的一般参考 - 在文档的末尾,命令行看起来不正确,但第一个看起来不错。无论如何,后面的那些都很模糊 - 只是想我会让你知道,因为我链接到它)。这里是the official Installshield help documentationWise setup.exe commands - Wise 不再可用,但如果设置较旧,它仍然可以与 Wise 一起打包。 Advanced Installer standard command line。对于此工具设置,显然可以使用setup.exe /xsetup.exe /extract 提取。查看完整列表的链接。 还有一个“silent switch finder”工具用于查找 exe 文件中的隐藏开关(用于部署),但它未能通过 virustotal.com 扫描,所以我不会链接到它。也许它正在使用一些奇异的东西,例如在位级别扫描文件的标题或被错误标记为恶意软件的奇怪东西?无论哪种方式,都不是我会使用的工具。 最后:http://unattended.sourceforge.net/installers.php。这个链接还不错,它展示了上面的一些工具和其他一些工具 - 以及最常用的开关。未经我测试,但看起来不错。 还有其他部署工具有自己的打包和交付 EXE 文件的方式 - 这可能是一个丛林。我可以提供带有更多链接的此类工具的列表,但这可能只是令人困惑。请先尝试上面提供的内容。 下面是一个通用的答案,可能也会有所帮助:Extract MSI from EXE

【讨论】:

非常感谢您花时间写这篇文章。我会尝试你上面的建议 没问题,整个文本有点乱——我只是把里面的所有链接都扔了。但是,如果您查看它们,我相信您应该能够处理您的问题。它提醒我 - 我需要再添加一条信息。有关应用程序重新打包的说明,请参阅答案的开头。

以上是关于如何使用 powershell 运行安装程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .NET 4 运行时运行 PowerShell?

如何使用 PowerShell 或 VBScript 获取正在运行的应用程序列表

如何从 C# 程序运行 PowerShell 脚本?

如何在windows下写shell脚本

如何从 PowerShell 运行 SQL Server 查询?

Powershell:通过 UpgradeCode 卸载应用程序