调用表达式:找不到接受参数 /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 的位置参数的主要内容,如果未能解决你的问题,请参考以下文章