对于 msiexec,这些定向到安装程序的不同方法有什么区别?

2024-04-04

我有一个简单的问题。我只找到了两种实际运行我的 msi 文件的方法,但它们都不起作用。

密切关注我的使用情况' and ".

简而言之,我想要一种方法来做到这一点:

$Basics = "$PSScriptRoot"
Start-Process msiexec.exe -Wait -ArgumentList "/i $Basics\Installer_.64 bit_.msi /passive /norestart"

然而字符串被赋予-ArgumentList无效,我不确定为什么。正如您在下面看到的,我已经做了很多尝试,试图做到这一点。
$Basics只是一个副本$PSScriptRoot现在,但我希望它有一个单独的变量,以防我将来更改它。
/passive /norestart出于测试目的而被删除。

注意:这不是实际安装程序文件的名称。这样做只是为了包含所有奇怪的字符(.,_,)我试图用它运行的一些安装程序有。基本上是最坏的情况。

另外,提前抱歉,要阅读的内容太多,我不太确定如何更好地格式化它。如果您知道更好的方法,请继续编辑。

尝试:

不是按顺序排列的,而是按照它是什么类型的尝试来组织的。我的第一次尝试是"/i '$Basics\Installer_.64 bit_.msi'"

Start-Process msiexec.exe -Wait -ArgumentList "/i $Basics\Installer_.64 bit_.msi"

^ 结果:打开通用 Windows Installer 帮助窗口。

Start-Process msiexec.exe -Wait -ArgumentList "/i '$Basics\Installer_.64 bit_.msi'"

^ 结果:打开通用 Windows Installer 帮助窗口。

Start-Process msiexec.exe -Wait -ArgumentList '/i $Basics\Installer_.64 bit_.msi'

^ 结果:“无法打开此安装包。请验证该包是否存在并且您可以访问它,或者联系应用程序供应商以验证这是一个有效的 Windows Installer 包。”

Start-Process msiexec.exe -Wait -ArgumentList '/i "$Basics\Installer_.64 bit_.msi"'

^ 结果:“无法打开此安装包。请验证该包是否存在并且您可以访问它,或者联系应用程序供应商以验证这是一个有效的 Windows Installer 包。”

Start-Process msiexec.exe -Wait -ArgumentList "/i Installer_.64 bit_.msi"

^ 结果:Works;但是,这是不可接受的,因为我需要能够将变量放入目录中。

Start-Process msiexec.exe -Wait -ArgumentList '/i "C:\Users\Administrator\Downloads\flashdrive\redist\Install (x86 Office)\Installer_.64 bit_.msi"'

^ 结果:Works;但是,这是不可接受的,因为我需要能够将变量放入目录中。

Start-Process msiexec.exe -Wait -ArgumentList "/i C:\Users\Administrator\Downloads\flashdrive\redist\Install (x86 Office)\Installer_.64 bit_.msi"

^ 结果:打开通用 Windows Installer 帮助窗口。

Start-Process msiexec.exe -Wait -ArgumentList "/i .\Installer_.64 bit_.msi"

^ 结果:“无法打开此安装包。请验证该包是否存在并且您可以访问它,或者联系应用程序供应商以验证这是一个有效的 Windows Installer 包。”


Powershell 将单引号之间的所有内容视为文字字符串。如果您使用单引号,您的变量将不会扩展。所以如果要使用变量扩展就需要使用双引号。
带双引号的示例的问题在于 powershell 将所有字符解释为单个变量,直到空格为止。由于“$Basics\Installer_.64 bit_.msi”不是您想要的变量,因此这也不起作用。您可以将变量名称放在大括号 ({}) 之间,以将其与字符串的其余部分分隔开。所以一个可行的例子是这样的:

Start-Process msiexec.exe -Wait -ArgumentList "/i ${Basics}\Installer_.64 bit_.msi"

另一种选择是使用格式字符串 https://ss64.com/ps/syntax-f-operator.html操作员:

'/i {0}\Installer_.64 bit_.msi' -f $Basics

该运算符为您提供了更多的自由,您可以使用它进行一些非常高级的字符串格式化。另一个额外的好处是这样您可以使用单引号。这确保不会发生扩展。例如,如果您的 msi 文件名称中包含美元符号,则第一个示例将不起作用,因为 powershell 将尝试扩展变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于 msiexec,这些定向到安装程序的不同方法有什么区别? 的相关文章

随机推荐