5

我有一个 .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. 从 ssh 或 telnet 调用 powershell 脚本powershell.exe -File C:\Sample.ps1

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

4

2 回答 2

3

您的/s被解释为您的Invoke-Expression调用的一部分。你可以试试Invoke-Command,即:

Invoke-Command { C:\Builds\$BuildName /s /v "/l*v c:\build_install.txt /qn" }
于 2013-09-06T21:14:26.547 回答
1

该错误消息表明 PowerShell 正在尝试将其解析/sInvoke-Expression的参数名称,而不是作为提供给-Command/s的参数的一部分,如果它们是字符串的一部分,它将不会这样做。这意味着字符串在此之前被终止。检查$BuildName的值,它可能包含终止字符串的内容。我不太确定那可能是什么,因为变量值中的一对双引号不应该有这种效果。至少它不会出现在 PowerShell 提示符下。也许 ssh 客户端正在以某种方式解释您输入的内容,从而终止了之前的字符串/s

在任何情况下,我都愿意打赌答案在于$BuildName值,因为从逻辑上讲,错误表明 -Command 的字符串参数在该点终止。

于 2013-09-06T21:59:03.680 回答