等效的 /s /V"/qn in powershell 命令



我正在尝试转换为应用程序提供的静默安装程序命令这在̣bat文件中运行得很好,但我需要在powershell中为的一个自动部署任务运行它

"BubblePop.exe" /s /V"/qn /lie Target=C:Usersamit TARGETDIR=C:Usersamit" 

我得到的错误是

必须在'/'运算符后面提供一个值表达式
在的第1行字符17

我尝试了以下操作-

将其添加到变量下:

$command = "BubblePop.exe" /s /V"/qn Target=C:Usersamit 
TARGETDIR=C:Usersamit" 
Invoke Expression $command

添加@:

@'"BubblePop.exe" /s /V"/qn Target=C:Usersamit TARGETDIR=C:Usersamit"'@

我认为问题出在/s上,但无法找到解决方法。此命令在windows cmd提示符下工作。有办法找到变通办法吗?

/s只是转移注意力,因为它只是基本问题的后续错误

您不能直接调用单引号或双引号的文件名或路径;相反,您必须使用&,呼叫操作员:

& "BubblePop.exe" /s /V"/qn /lie Target=C:Usersamit TARGETDIR=C:Usersamit" 

当然,对于像BubblePop.exe这样没有嵌入空格的可执行文件名,不需要单引号或双引号,可以简单地省略,在这种情况下,&的使用是可选的:

BubblePop.exe /s /V"/qn /lie Target=C:Usersamit TARGETDIR=C:Usersamit" 

此外,请注意,当整个参数传递给BubblePop.exe时,/V后面的值周围的双引号将不会被保留,因为PowerShell将整个参数转换为
"/V/qn /lie Target=C:Usersamit TARGETDIR=C:Usersamit",即,在整个参数周围加双引号,以便BubblePop.exe最终将该参数视为
/V/qn /lie Target=C:Usersamit TARGETDIR=C:Usersamit
如果BubblePop.exe确实需要这些双引号,则必须将其转义为`",以便将其传递:

& "BubblePop.exe" /s /V`"/qn /lie Target=C:Usersamit TARGETDIR=C:Usersamit`" 

附带说明:这在Unix类平台上的PowerShellCore中不起作用,在那里甚至会剥离转义的"实例


如果用'"启动语句,PowerShell将以表达式模式(类似编程语言(而不是参数方式(类似shell(对其进行解析-请参阅Get-Help about_Parsing

例如,"BubblePop.exe"本身将被简单地解释为一个(可扩展的(字符串文本,默认情况下,它只是输出到控制台。

当解析"BubblePop.exe" /s ...时,/被解释为除法运算符,它显然期望后面有一个(除数(;并且意外的令牌(如s(会导致您看到的You must provide a value expression following the '/' operator.错误。

您需要引用参数,否则它们将被powershell解析器解释为运算符。您有这个选项,或者停止解析器操作符(--%(,它将回退到v3+中的cmd解析器:

BubblePop.exe '/s' '/V"/qn Target=C:Usersamit TARGETDIR=C:Usersamit"'

BubblePop.exe --% /s /V"/qn Target=C:Usersamit TARGETDIR=C:Usersamit"

最新更新