如果我定义以下内容
[parameter(Mandatory = $true)]
[alias("db")]
[string]$database,
Run Code Online (Sandbox Code Playgroud)
然后我收到一个错误
Parameter alias cannot be specified because an alias with the name 'db'
was defined multiple times for the command.
Run Code Online (Sandbox Code Playgroud)
这是事实,因为db
它已经是通用-Debug
参数的别名.
是否可以在不重命名参数的情况下定义此别名?
对不起,你不能.-Debug
是一个常见的参数,所以-Debug
并且-db
是几乎所有东西都可用的开关,包括你自己编写的函数.正如错误告诉你的那样,它已经定义了.
即使有可能绕过去取消定义内置别名,即unexpectantly像改变打电话的意思test-db -db
别人谁经常使用-db
的替代-Debug
.他们希望它能够启用调试输出,而不是指定不同的参数.
考虑这个功能:
function test-db{
param(
[parameter(mandatory=$true)]
[string]$database)
write-host 'database' $database
write-debug 'debugging output'
}
Run Code Online (Sandbox Code Playgroud)
现在用,和test-db server
,调用它.第一个不做,而另外两个做,无论在哪里.您也无法定义单独的参数(或重命名为),因为Powershell会给您以下错误:test-db -db server
test-db server -db
write-debug
-db
[string]$db
$database
$db
无法指定参数'db',因为它与参数'Debug'的同名参数别名冲突.
有关此问题的更多信息,根据MSDN:
除了使用AliasAttribute属性之外,Windows PowerShell运行时还会执行部分名称匹配,即使未指定别名也是如此.例如,如果您的cmdlet具有FileName参数,并且该参数是以F开头的唯一参数,则用户可以输入Filename,Filenam,File,Fi或F,并仍将该条目识别为FileName参数.
归档时间: |
|
查看次数: |
7589 次 |
最近记录: |