我是 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 解析器在不同的地方以不同的方式工作?
正如 AdminOfThings 所指出的,错误消息的
add-computer ?DomainName
部分意味着 -
中的
-DomainName
字符被 PowerShell 误解,导致令牌被解释为 位置参数 而不是参数名称.
因此,
example.com
论证变成了另一个——因此未被识别——位置论证。
虽然使用 ASCII 范围
-
“破折号”(严格来说:连字符减号,U+002D
)作为参数名称符号绝对是更好的选择,但 PowerShell 确实 接受非 ASCII 变体,例如 –
(破折号,U+2013
),如果没有出现,则意味着 PowerShell 误解了您的源代码,可以通过使用 UTF-8 编码重新保存脚本来解决问题 BOM - 请参阅此答案。