我想为我的一个功能禁用PowerShell的“常用参数”。通过编写如下函数,我一直在研究p4.exe(Perforce命令行实用程序)的一组扩展:
function p4(
[parameter(valuefromremainingarguments=1)]
[string[]]$cmdline)
{
# ...do some fun stuff with $cmdline...
p4.exe $cmdline # for illustration only - actual implementation uses .net objects
}
关键是能够像我通常在命令行上那样使用p4,除非有时神奇的一些参数将被重新处理(添加新命令或调用不同的工具或其他),它总会感觉好像我我只是使用普通的p4命令行。
这很有效,直到我开始使用像'-o'这样的参数。
p4 -p 1666 user -o scobi
在这种情况下,我从PowerShell收到错误:
p4 : Parameter cannot be processed because the parameter name 'o' is ambiguous. Possible matches include: -OutVariable -OutBuffer.
我发现它的唯一方法是引用我的参数:
p4 -p 1666 user '-o' scobi
p4 '-p 1666 user -o scobi'
Yucky,并且妨碍了我的目标,即让这个函数成为p4.exe的透明超集。
是否有一个魔法属性可以附加到我的函数,使它告诉shell“我不支持常用参数”?或者还有其他方法吗?
答案 0 :(得分:4)
根本不使用高级功能,使用没有参数的普通功能。在函数内部使用$args
来引用参数。
function p4()
{
$args
}
p4 -p 1666 user -o scobi
输出:
-p
1666
user
-o
scobi
<强>更新强>
实际上该函数仍然可以使用自己的参数,例如:
function p4($myparam)
{
"param $myparam"
$args
}
p4 -p 1666 user -o scobi -myparam value
输出:
param value
-p
1666
user
-o
scobi
警告:参数名称不应与其他潜在参数冲突。例如,这不起作用:
function p4($param)
{
"param $param"
$args
}
p4 -p 1666 user -o scobi -param value
结果:
ERROR: ParameterBindingException:
p4 : Cannot bind parameter because parameter 'param' is specified more than once. ...