簡體   English   中英

PowerShell中的參數綁定問題

[英]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能否在我的兩種情況下綁定到參數集s2s3

這意味着沒有時間為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM