【问题标题】:Powershell positional parameter cannot be found找不到Powershell位置参数
【发布时间】:2021-07-27 03:34:22
【问题描述】:

我是 Powershell 新手。当我从 ps1 文件中运行以下命令时:

add-computer -DomainName "example.com" -NewName "adfsserver" -restart

...我收到此错误:

A positional parameter cannot be found that accepts argument 'example.com'
+ add-computer ?DomainName "example.com" -NewName "adfsserver" -restart

有趣的是,如果我只是打开一个 PowerShell 窗口并粘贴此命令,它就可以正常工作(尽管它会提示我输入凭据)。

对我来说,位置参数是一个参数,其值由它在参数列表中的相对位置决定。我没有看到我正在使用任何位置参数,我正在使用命名参数(或命名键,无论 Powershell 调用它)。根据示例here,我正确使用了-DomainName。我不能说它反对“-DomainName”或“example.com”。

对于我的一生,我不明白为什么当我手动输入命令时它工作得非常好 - Windows 是否有不同的 PowerShell 解析器在不同的地方以不同的方式工作?

【问题讨论】:

  • 确保您的破折号不是 endash 或 emdash。 ? 表示无法识别的字符,这是典型的 ASCII 和 endash 和 emdash 字符。您可能是从明显难以区分的位置复制的
  • 除了@AdminOfThings 有用的评论,您还可以使用Splatting 来避免此类错误。

标签: powershell


【解决方案1】:

正如AdminOfThings 指出的那样,错误消息中的add-computer ?DomainName 部分暗示-DomainName 中的- 字符被PowerShell 误解,导致令牌被解释为位置参数 em> 而不是参数名称

因此,example.com 参数变成了另一个 - 因此无法识别 - 位置参数。

虽然使用 ASCII 范围 -“破折号”(严格来说:连字符减号,U+002D)作为参数名称标记绝对更可取,但 PowerShell 确实接受非 ASCII诸如(破折号,U+2013)之类的变体,如果不是,则意味着 PowerShell 误解了您的源代码,通过重新保存脚本可以解决此问题使用 UTF-8 编码使用 BOM - 请参阅 this answer

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2017-11-06
    • 2016-05-27
    • 1970-01-01
    • 2019-05-07
    • 2021-04-12
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多