我有一个.ps1脚本,其中包含一行
Invoke-Expression -Command "C:\Builds\$BuildName /s /v`"/l*v c:\build_install.txt /qn`""<br/>
这是执行产品的静音安装。
现在,如果我尝试通过ssh从Linux框运行此命令,则会出现以下错误:
Invoke-Expression : A positional parameter cannot be found that accepts argument '/s'.
At line:1 char:1
+ Invoke-Expression C:\NWTBuilds\Setup-NimbleNWT-x64.2.0.4.117.exe /s /v`/l*v c:\n ...
+ CategoryInfo : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand
你对此有什么建议吗?我需要提供任何凭证吗?
所以我也尝试了以下选项:
powershell.exe -Command ...
powershell.exe -File C:\Sample.ps1
但是,如果我从Windows Powershell运行相同的Sample.ps1
,则完成静默安装?
答案 0 :(得分:1)
您的 / s 被解释为您的 Invoke-Expression 电话的一部分。你能试试 Invoke-Command ,即:
Invoke-Command { C:\Builds\$BuildName /s /v "/l*v c:\build_install.txt /qn" }
答案 1 :(得分:1)
错误消息表明PowerShell正在尝试将/s
解析为 Invoke-Expression 的参数名称,而不是作为提供给 -Command <的参数的一部分/ strong>,如果/s
是字符串的一部分,它就不会这样做。这意味着字符串在此之前被终止。检查 $ BuildName 的值,它可能包含终止字符串的内容。我不太确定它可能是什么,因为变量值中的一对双引号不应该具有该效果。至少它不会出现在PowerShell提示符下。也许ssh客户端正在以某种方式解释你输入的内容,以便在/s
之前终止字符串?
在任何情况下,我都愿意打赌钱的答案在于 $ BuildName 的值,因为从逻辑上讲,错误表明 -Command的字符串参数终止于那一点。