无法从powershell

时间:2016-10-13 02:45:43

标签: powershell elixir

当我在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语法,这是一个问题。

3 个答案:

答案 0 :(得分:9)

问题是iex是Powershell中的别名,是Invoke-Expression的缩写。如果您尝试运行命令iex.exeiex.batiex.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