找不到Powershell位置参数

问题描述 投票:0回答:1

我是 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 解析器在不同的地方以不同的方式工作?

powershell parameter-passing
1个回答
4
投票

正如 AdminOfThings 所指出的,错误消息的

add-computer ?DomainName
部分意味着 -
 中的 
-DomainName
字符被 PowerShell
误解,导致令牌被解释为 位置参数 而不是参数名称.

因此,

example.com
论证变成了另一个——因此未被识别——位置论证。

虽然使用 ASCII 范围

-
“破折号”(严格来说:连字符减号,
U+002D
)作为参数名称符号绝对是更好的选择,但 PowerShell 确实 接受非 ASCII 变体,例如
 
(破折号,
U+2013
),如果没有出现,则意味着 PowerShell 误解了您的源代码,可以通过使用 UTF-8 编码重新保存脚本来解决问题 BOM - 请参阅此答案

© www.soinside.com 2019 - 2024. All rights reserved.