【发布时间】:2013-09-26 21:06:18
【问题描述】:
我想创建一个 Powershell 脚本,它采用标准 Linux 样式的参数,即 --my-param,带前导 --。我认为这可能使用别名参数属性,如
Param (
[parameter(Mandatory=$true)]
[alias("-my-param","p")]
[String]
$param
)
我希望这是电话
c:\src\ps\params.ps1 --my-param "x"
将被识别为引用别名 -my-param。不幸的是,我得到的是
C:\src\ps\params.ps1 : A positional parameter cannot be found that accepts argument 'x'.
At line:1 char:21
+ c:\src\ps\params.ps1 <<<< --my-param1 "x"
+ CategoryInfo : InvalidArgument: (:) [params.ps1], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,params.ps1
另一方面,使用别名 my-param 可以让我使用 -my-param 调用脚本。 有没有办法在 Powershell 中以 -- 开头指定参数名称?
【问题讨论】:
-
您要解决什么问题?如果你想要一个表现得像 Linux shell 的 shell,安装 Cygwin 或其他已经移植到 Windows 的 Unix shell?否则,请坚持使用 PowerShell 的约定,否则可能会让熟悉 PowerShell 的人感到困惑。 IOW,坚持环境的成语,不要试图将其他环境的成语嫁接到它上面。
-
@alroc 完全不同的问题。这个问题是关于调用外部程序(在这种情况下是用 C# 编写的东西)的问题,使用来自 PowerShell 提示符的 -- 参数(其中这些参数 对于该外部程序是合法的,但 PowerShell 没有通过他们到程序)。这是关于让 PowerShell 脚本接受以 -- 开头的参数。这也是为什么像 Cygwin 这样的东西不是解决方案的原因。他不希望 shell 表现得像 Unix shell。大概他想在 PS 提示符下调用他的 PS 脚本,他只是希望它接受 -- 参数。
-
@alroc,Adi Inbar 是正确的。我想知道Powershell提供的自动参数处理是否有办法识别'--'参数。原因是我在 Windows 和 Linux 上都有做同样事情的脚本,Linux 在我工作的地方占主导地位,如果可以轻松自然地完成,所有脚本都使用主导平台的参数约定似乎是合理的。好像'--'是Powershell专门处理的,所以我会按照你的建议去做,并坚持每个平台的约定。
-
我发现的各种以前的答案是指布鲁斯·佩耶特的书。但它指的是 '--' 本身作为一种参数停止器出现,而不是在较大标记开头的 '--' 的情况。
标签: powershell