调用表达式:找不到接受参数 /s 的位置参数

Posted

技术标签:

【中文标题】调用表达式:找不到接受参数 /s 的位置参数【英文标题】:Invoke-Expression: Positional parameter cannot be found that accepts argument /s 【发布时间】:2013-09-11 01:47:43 【问题描述】:

我有一个包含一行的 .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

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

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

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

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

【问题讨论】:

我在不使用 powerShell 的情况下解决了这个问题。 BuildName 是:Windows-NNN-Setup-x64.2.12.3.109.exe 【参考方案1】:

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

Invoke-Command  C:\Builds\$BuildName /s /v "/l*v c:\build_install.txt /qn" 

【讨论】:

我尝试了上面的命令它没有工作。我什至尝试了以下选项 Invoke-Command -ScriptBlock "C:\Builds\$BuildName /s /v'/l*v c:\build_install.txt /qn""【参考方案2】:

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

无论如何,我愿意赌钱,答案在于 $BuildName 的值,因为从逻辑上讲,错误表明 -Command 的字符串参数strong> 在那一点终止。

【讨论】:

感谢 Adi,构建名称是“mcmattu-2.0.0.1.exe”。如果我完全摆脱 Powershell 并让它在默认的 cmd 提示符下运行,那么它就可以工作了。 您能显示分配 $BuildName 的代码吗? has 里面有一些东西会终止字符串(可能是结尾的一些非打印字符?),因为错误告诉你的是字符串在那个时候被终止,@987654324 @ 被解析为 iex 的参数。 $BuildName = "Windows-NNN-Setup-x64.2.12.3.109.exe" 我很困惑。您在上面说过 Build Name 是“mcmattu-2.0.0.1.exe”,但现在您说您正在将“Windows-NNN-Setup-x64.2.12.3.109.exe”分配给 $BuildName。它是哪一个?另外...试试$test = "C:\Builds\$BuildName /s /v`"/l*v c:\build_install.txt /qn`""; Write-Host $test 看看你会得到什么。

以上是关于调用表达式:找不到接受参数 /s 的位置参数的主要内容,如果未能解决你的问题,请参考以下文章

WIN10在运行命令符时提示“找不到接受实际参数“start=”的位置形式参数”是怎么回事?

函数参数介绍

函数参数注意事项

函数基础之调用,参数,可变长参数

Python虚拟机函数机制之位置参数

函数小结