powershell - 位置等于 1 或没有参数值的单个参数参数?
问题描述
我偶然发现了一个带有单个参数的函数,有两件事我不明白,仅仅是因为文档没有提到它们。
这是一个函数:
function Some-Function
{
[CmdletBinding()]
param (
[Parameter(Mandatory,
Position = 1, ValueFromPipeline)]
[string] $Input
)
}
问题一:
既然是单参数函数,为什么Position
设置为1呢?这意味着什么?我在这里看不到任何意义,默认值有什么问题Position = 0
?
问题2:
ValueFromPipeline
并且Mandatory
参数未设置为任何值,即,= $true
如果= $false
未设置为值,这些参数的默认值是多少?
我在文档中找不到任何地方来解释这一点,并且文档上的示例都不是这样的。
解决方案
既然是单参数函数,为什么 Position 设置为 1?
在这种情况下,根本不需要设置Position
属性。
虽然以 开头的属性是一个很好的约定,但在技术上并不是必需的 - 重要的是所有参数与属性的相对顺序。
Position
0
Position
在没有任何
Position
属性的情况下,参数声明的顺序(参数除外[switch]
)隐式定义了它们的位置顺序,除非您使用[CmdletBinding(PositionalBinding=$false)]
,在这种情况下,只有显式Position
属性才重要。
注意:存在[CmdletBinding(PositionalBinding=$false)]
或至少一个 [Parameter(Position=...)]
属性会隐式地将默认值切换为non-positional:也就是说,所有未显式指定Position
值的参数都变为non-positional,这意味着它们只能在参数名称 (例如,-foo bar
而不仅仅是bar
)。
ValueFromPipeline
并且Mandatory
参数未设置为任何值
在 PowerShell v3+中,为了简洁起见,省略属性的属性值默认为$true
。
推荐阅读
- ios - 推送视图控制器后如何保留 UITabBar
- python - Python/Django:我需要一些代码在请求之间运行,要寻找哪个概念?
- python - 使用具有正确语法的 pandas to_datetime() 方法,无法识别的值类型:str?
- c++ - std::get_time 在 Visual C++ 2017 上失败
- apache-kafka - systemd execstart 脚本未读取环境变量
- python-3.x - 具有多线程的 Python 端口扫描器
- excel - 在 Excel VBA 中使用通配符进行上标
- javascript - xpath 无法识别标签
- javascript - 从 FlowRouter 交换到 IronRouter
- javascript - CSS - 通过父高度/宽度限制元素位置以防止溢出