我正在尝试转换为应用程序提供的静默安装程序命令 在̣bat文件中可以很好地运行,但是我需要在powershell中执行自动部署任务之一
"BubblePop.exe" /s /V"/qn /lie Target=C:\Users\amit TARGETDIR=C:\Users\amit"
我得到的错误是
必须在'/'运算符后提供一个值表达式。
的第1行字符17
在/ s
我尝试了以下-
将其添加到变量下:
$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提示符下有效。有没有解决办法?
答案 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"