自从我使用PowerShell以来,我很难弄清楚ParameterSets
应该如何正确使用。在下面的示例中,如果我们其中一个被解决,我希望$OlderThan
和$Quantity
都填写。
正如你所看到的,经过一些游戏之后,这种方法运作得很好:
[CmdletBinding(SupportsShouldProcess=$True,DefaultParameterSetName='A')]
Param (
[parameter(Mandatory=$true,Position=0,ParameterSetName='A')]
[parameter(Mandatory=$true,Position=0,ParameterSetName='B')]
[ValidateNotNullOrEmpty()]
[ValidateScript({Test-Path $_ -PathType Container})]
[String]$Source,
[parameter(Mandatory=$false,Position=1,ParameterSetName='A')]
[parameter(Mandatory=$false,Position=1,ParameterSetName='B')]
[ValidateNotNullOrEmpty()]
[ValidateScript({Test-Path $_ -PathType Container})]
[String]$Destination = $Source,
[parameter(Mandatory=$false,ParameterSetName='A')]
[parameter(Mandatory=$false,ParameterSetName='B')]
[ValidateSet('Year','Year\Month','Year-Month')]
[String]$Structure = 'Year-Month',
[parameter(Mandatory=$true,ParameterSetName='B')]
[ValidateSet('Day','Month','Year')]
[String]$OlderThan,
[parameter(Mandatory=$true,ParameterSetName='B')]
[Int]$Quantity
)
Get-Help
向我展示了正常的语法:
SYNTAX
S:\Test.ps1 [-Source] <String> [[-Destination] <String>] [-Structure <String>] [-WhatIf] [-Confirm] [<CommonParameters>]
S:\Test.ps1 [-Source] <String> [[-Destination] <String>] [-Structure <String>] -OlderThan <String> -Quantity <Int32> [-WhatIf] [-Confirm] [<Com
monParameters>]
但现在让我感到困扰的是,当我输入PowerShell ISE时,当我输入减号(OlderThan
时,它不会自动建议参数Quantity
和-
)。
对于所有其他参数,它会显示带有智能感知的名称。因此,当我想使用这两个参数时,我不得不记住它们的名字并手动输入。这是它应该如何工作?
因为当我尝试DefaultParameterSetName='B'
时,它正在对所有参数进行智能感知,但它也期望我填写所有参数,而这不是我所追求的。
感谢您的帮助。