在powershell命令中等效于/ s / V“ / qn

时间:2018-07-23 13:20:31

标签: powershell

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

"BubblePop.exe" /s /V"/qn /lie Target=C:\Users\amit TARGETDIR=C:\Users\amit" 

我得到的错误是

  

必须在'/'运算符后提供一个值表达式。
  在/ s

的第1行字符17

我尝试了以下-

将其添加到变量下:

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

添加@:

@'"BubblePop.exe" /s /V"/qn Target=C:\Users\amit TARGETDIR=C:\Users\amit"'@

我认为问题出在/s,但无法解决。 此命令在Windows cmd提示符下有效。有没有解决办法?

2 个答案:

答案 0 :(得分:2)

/s是一个红色鲱鱼,因为它只是您的基本问题的后续错误:

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

& "BubblePop.exe" /s /V"/qn /lie Target=C:\Users\amit TARGETDIR=C:\Users\amit" 

当然,使用BubblePop.exe之类的可执行文件名没有嵌入空格,并不需要单引号或双引号,可以将其省略,在这种情况下使用{{ 1}}是可选的:

&

另外,请注意,将整个参数传递给BubblePop.exe /s /V"/qn /lie Target=C:\Users\amit TARGETDIR=C:\Users\amit" 时,将保留/V后面的双引号保留,因为PowerShell将整个参数转换为
BubblePop.exe ,即在整个参数周围加上双引号,以便"/V/qn /lie Target=C:\Users\amit TARGETDIR=C:\Users\amit"最终将参数视为
BubblePop.exe
但是,如果/V/qn /lie Target=C:\Users\amit TARGETDIR=C:\Users\amit确实需要这些双引号,则必须将它们作为BubblePop.exe进行转义,以使它们通过:

`"

在旁注:在类似 Unix 的平台上的PowerShell Core 中,这将不起作用,即使是转义的& "BubblePop.exe" /s /V`"/qn /lie Target=C:\Users\amit TARGETDIR=C:\Users\amit`" 实例也可以在其中运行被剥夺。


如果您使用"'开头的语句,PowerShell将以 expression 模式(如编程语言)而不是自变量来解析它模式(如外壳)-请参见Get-Help about_Parsing

例如,"本身将被简单地解释为(可扩展的) string 文字,默认情况下,它只是对控制台的 output

当解析"BubblePop.exe"时,"BubblePop.exe" /s ...被解释为除法运算符,显然,它需要一个 number (除数);并且意外的令牌(例如/会导致您看到的s错误。

答案 1 :(得分:0)

您需要引用您的参数,否则Powershell解析器会将其解释为运算符。您可以使用该选项,也可以使用停止解析器运算符(--%),该运算符将在v3 +中退回到cmd解析器中:

BubblePop.exe '/s' '/V"/qn Target=C:\Users\amit TARGETDIR=C:\Users\amit"'

BubblePop.exe --% /s /V"/qn Target=C:\Users\amit TARGETDIR=C:\Users\amit"