我有一个简单的函数,它有两个参数。我没有提到它们是位置但是,当我检查该功能的帮助时,它会自动为它们分配一个位置。如何强制它们仅被命名为参数(不按位置接受值)?
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
答案 0 :(得分:4)
默认情况下,所有函数参数都是位置参数。 Windows PowerShell 按照顺序将位置编号分配给参数 参数在函数中声明。要禁用此功能,请设置 CmdletBinding的PositionalBinding参数的值 属性为$ False。
所以你的功能看起来像这样:
Function Test-Params
{
[CmdletBinding(PositionalBinding=$false)]
Param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
$Param1,
[Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
$Param2
)
Write-Host "$Param1 $Param2"
}