Sav*_*ngh 5 powershell parameter-passing
我有一个简单的函数,有两个参数。我没有提到它们是位置性的,但当我检查该函数的帮助时,它会自动为它们分配一个位置。如何强制它们仅被命名为参数(不接受按位置的值)?
Function Test-Params
{
Param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
$Param1,
[Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
$Param2
)
Write-Host "$Param1 $Param2"
}
Run Code Online (Sandbox Code Playgroud)
当我检查此函数的帮助或尝试通过提供参数位置值来运行该函数时,它可以工作(但它不应该工作):
Test-Params test1 test2
test1 test2
Run Code Online (Sandbox Code Playgroud)
帮助输出:
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
Run Code Online (Sandbox Code Playgroud)
默认情况下,所有函数参数都是位置参数。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"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |