Invoke-Expression:找不到接受参数的位置参数

时间:2013-09-06 21:06:00

标签: powershell ssh installation telnet silent

我有一个.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

你对此有什么建议吗?我需要提供任何凭证吗?

所以我也尝试了以下选项:

  1. 通过ssh或telnet powershell.exe -Command ...
  2. 发送命令
  3. 从ssh或telnet powershell.exe -File C:\Sample.ps1
  4. 调用powershell脚本

    但是,如果我从Windows Powershell运行相同的Sample.ps1,则完成静默安装?

2 个答案:

答案 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的字符串参数终止于那一点。