我正在尝试转换为应用程序提供的静默安装程序命令这在̣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"