当我在PowerShell中输入iex -S mix
时,我收到此错误:
Invoke-Expression : A positional parameter cannot be found that accepts argument 'mix'.
At line:1 char:1
+ iex S mix
+ ~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand
编写' -S mix'的正确方法是什么?在' iex'之后命令获得相同的效果在cmd中输入它会做什么?我不相信PowerShell语法,这是一个问题。
答案 0 :(得分:9)
问题是iex
是Powershell中的别名,是Invoke-Expression
的缩写。如果您尝试运行命令iex.exe
,iex.bat
或iex.cmd
,则必须以某种独特的方式指定它:显式(或完整)路径,甚至只是添加应用程序的扩展可能就足够了。这样,Powershell就不会尝试运行Invoke-Expression
。
Get-Command
可以为你清除这类事情:
PS C:\Dir> Get-Command iex
CommandType Name ModuleName
----------- ---- ----------
Alias iex -> Invoke-Expression
PS C:\Dir> Get-Command cmd
CommandType Name ModuleName
----------- ---- ----------
Application cmd.exe
似乎无法同时列出命令类型和路径:如果要查看哪个iex
,可以使用此表单:
PS C:\Dir> Get-Command -All iex -Syntax
Invoke-Expression
C:\windows\iex.bat
您可以找到有关Powershell如何决定在Microsoft technet library中运行哪个命令的更多信息。
答案 1 :(得分:8)
对于其他可能会看到此问题的人:
简短回答 - 从Powershell类型iex.bat
内运行iex。在这个特殊情况下iex.bat -S mix
答案 2 :(得分:1)
如果您在不同的平台上使用Elixir,并且不需要其他不一致的来源(例如需要记住使用iex.bat
而不是iex
),则可以删除Invoke-Expression
别名像这样:
Remove-Item alias:\iex -Force
现在,您可以iex -S mix
或任何您喜欢的内容。请注意,这可能与您可能运行的其他脚本冲突,这些脚本假定iex
为别名Invoke-Expression
。例如,在解除绑定iex
时,我遇到了Azure SDK的问题,但是我不再在同一台计算机上执行Elixir和Azure开发,并且还没有遇到任何其他问题。 / p>
如果您希望这种情况自动发生,请将其添加到Powershell配置文件中。最简单的方法是从Powershell运行notepad $PROFILE
,然后在个人资料脚本结尾处添加Remove-Item alias:\iex -Force
。