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"
}