[英]Parameter binding issue in PowerShell
我有這個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文檔中找到了可能與我的問題直接相關的內容 :
有一種情況是,即使指定了默認參數集名稱,Windows PowerShell也無法使用默認參數集。 Windows PowerShell運行時無法僅基於對象類型區分參數集。 例如,如果您有一個參數集,其中取一個字符串作為文件路徑,另一個集合直接接受FileInfo對象,則Windows PowerShell無法根據傳遞給cmdlet的值確定要使用的參數集,也不能它使用默認參數集。 在這種情況下,即使您指定了默認參數集名稱,Windows PowerShell也會拋出不明確的參數集錯誤消息。
你的邏輯是正確的,Powershell 應該能夠根據你的函數定義和示例用法找出參數集。
顯然,Powershell v2對此沒有足夠強大的邏輯。 雖然它在Powershell v3中按預期工作,這進一步證實了它是v2中的缺點/錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.