PowerShell中的命名参数显示为位置参数

PowerShell中的命名参数显示为位置参数,powershell,parameter-passing,Powershell,Parameter Passing,我有一个简单的函数,它有两个参数。我没有提到它们是位置性的,但当我检查该功能的帮助时,它会自动为它们分配位置。我如何强制它们仅被命名为参数(不接受按位置的值) 当我检查此函数的帮助或尝试通过提供参数位置值来运行该函数时,它可以工作(但不应该工作): 帮助输出: help Test-Params -Full NAME Test-Params SYNTAX Test-Params [-Param1] <Object> [[-Param2] <Object>

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

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

帮助输出:

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
帮助测试参数-完整
名称
测试参数
语法
测试参数[-Param1][-Param2][]
参数
-参数1
必修的?真的
位置?0
接受管道输入?true(按值、按属性名称)
参数集名称(全部)
别名无
动态假的
-参数2
必修的?假的
位置?1.
接受管道输入?true(按值、按属性名称)
参数集名称(全部)
别名无
动态假的
默认情况下,所有函数参数都是位置参数。Windows PowerShell 将位置编号按参数的顺序分配给参数
参数在函数中声明。要禁用此功能,请设置 CmdletBinding的PositionBinding参数的值 属性为$False

因此,您的函数如下所示:

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

        [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param2
    )

    Write-Host "$Param1 $Param2"
}

很高兴知道;在
positionbinding=$false
就位的情况下,使用特定于参数的
Position=
属性(例如,
[参数(强制,位置=0)]
显式地使选择的参数处于位置。
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
Function Test-Params
{
    [CmdletBinding(PositionalBinding=$false)]
    Param
    (
        [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param1,

        [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param2
    )

    Write-Host "$Param1 $Param2"
}