【问题标题】:Named parameter in PowerShell showing as PositionalPowerShell 中的命名参数显示为位置
【发布时间】:2016-11-14 19:52:36
【问题描述】:

我有一个简单的函数,它有两个参数。我没有提到它们是位置的,但是当我检查该功能的帮助时,它会自动为它们分配一个位置。如何强制它们仅被命名为参数(不接受位置值)?

Function Test-Params
{
    Param
    (
        [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param1,

        [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param2
    )

    Write-Host "$Param1 $Param2"
}

当我查看此函数的帮助或尝试通过提供参数位置值来运行该函数时,它可以工作(但它不应该工作):

Test-Params test1 test2
test1 test2

帮助输出:

help Test-Params -Full

NAME
    Test-Params

SYNTAX
    Test-Params [-Param1] <Object> [[-Param2] <Object>]  [<CommonParameters>]


PARAMETERS
    -Param1 <Object>

        Required?                    true
        Position?                    0
        Accept pipeline input?       true (ByValue, ByPropertyName)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false

    -Param2 <Object>

        Required?                    false
        Position?                    1
        Accept pipeline input?       true (ByValue, ByPropertyName)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false

【问题讨论】:

    标签: powershell parameter-passing


    【解决方案1】:

    默认情况下,所有函数参数都是位置参数。 Windows PowerShell 按
    的顺序将位置编号分配给参数 参数在函数中声明。要禁用此功能,请设置 CmdletBinding 的 PositionalBinding 参数的值 属性为 $False。

    Source.

    所以你的函数看起来像这样:

    Function Test-Params
    {
        [CmdletBinding(PositionalBinding=$false)]
        Param
        (
            [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
            $Param1,
    
            [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
            $Param2
        )
    
        Write-Host "$Param1 $Param2"
    }
    

    【讨论】:

    • 很高兴知道;使用PositionalBinding=$false,使用特定参数的Position=&lt;n&gt; 属性(例如,[Parameter(Mandatory,Position=0)] 显式使选择参数定位。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2016-01-08
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多