首页 > 解决方案 > 位置等于 1 或没有参数值的单个参数参数?

问题描述

我偶然发现了一个带有单个参数的函数,有两件事我不明白,仅仅是因为文档没有提到它们。

这是一个函数:

function Some-Function
{
    [CmdletBinding()]
    param (
        [Parameter(Mandatory,
        Position = 1, ValueFromPipeline)]
        [string] $Input
    )
}

问题一:

既然是单参数函数,为什么Position设置为1呢?这意味着什么?我在这里看不到任何意义,默认值有什么问题Position = 0

问题2:

ValueFromPipeline并且Mandatory参数未设置为任何值,即,= $true如果= $false 未设置为值,这些参数的默认值是多少?

我在文档中找不到任何地方来解释这一点,并且文档上的示例都不是这样的。

标签: powershellparameters

解决方案


既然是单参数函数,为什么 Position 设置为 1?

在这种情况下,根本不需要设置Position属性。

  • 虽然以 开头的属性是一个很好的约定,但在技术上并不是必需的 - 重要的是所有参数与属性的相对顺序。Position0Position

  • 没有任何Position属性的情况下,参数声明的顺序(参数除外[switch]隐式定义了它们的位置顺序,除非您使用[CmdletBinding(PositionalBinding=$false)],在这种情况下,只有显式 Position属性才重要。

注意:存在[CmdletBinding(PositionalBinding=$false)] 至少一个 [Parameter(Position=...)]属性会隐式地将默认值切换为non-positional:也就是说,所有未显式指定Position值的参数都变为non-positional,这意味着它们只能在参数名称 (例如,-foo bar而不仅仅是bar)。


ValueFromPipeline并且Mandatory参数未设置为任何值

在 PowerShell v3+中,为了简洁起见,省略属性的属性值默认为$true


推荐阅读