【发布时间】:2012-09-19 18:23:34
【问题描述】:
我有这个 PowerShell cmdlet:
function Test-ParameterBinding {
#
# .SYNOPSIS
# Tests parameter binding.
#
[CmdletBinding()]
param (
[Parameter(ParameterSetName = 's1', Mandatory = $true)]
[int] $P1,
[Parameter(ParameterSetName = 's1')]
[Parameter(ParameterSetName = 's2', Mandatory = $true)]
[string] $P2,
[Parameter(ParameterSetName = 's1')]
[Parameter(ParameterSetName = 's3', Mandatory = $true)]
[bool] $P3
)
process { $PSCmdlet }
}
这里是这个 cmdlet 的帮助:
SYNTAX
Test-ParameterBinding -P1 <Int32> [-P2 <String>] [-P3 <Boolean>] [<Com…
Test-ParameterBinding -P2 <String> [<CommonParameters>]
Test-ParameterBinding -P3 <Boolean> [<CommonParameters>]
查看代码并提供帮助,我想我可以像这样使用 cmdlet:
Test-ParameterBinding -P2 'Bind to param set s2'
Test-ParameterBinding -P3 $true # Bind to param set s3
但是对于这两个我得到:
Parameter set cannot be resolved using the specified named parameters.
问题 1: 在我的两种情况下,PowerShell 是否应该能够绑定到参数集 s2 和 s3?
这意味着没有时间为 PowerShell 版本 2 实施它,或者他们没有发现这个问题。
问题 2: 我的推理有问题吗?在这些情况下参数绑定会失败吗?
我在PowerShell documentation 中发现了可能与我的问题直接相关的内容:
在一种情况下,即使指定了默认参数集名称,Windows PowerShell 也无法使用默认参数集。 Windows PowerShell 运行时无法区分仅基于对象类型的参数集。例如,如果您有一个参数集采用字符串作为文件路径,而另一个参数集直接采用 FileInfo 对象,则 Windows PowerShell 无法根据传递给 cmdlet 的值确定要使用的参数集,也不会它使用默认参数集。在这种情况下,即使您指定了默认参数集名称,Windows PowerShell 也会引发不明确的参数集错误消息。
【问题讨论】:
标签: powershell parameterbinding