自定义PowerShell函数,在设置参数的时候中,可以将参数设置为某些情况下可选,某些条件下又设置为必选。
示例代码从网站复制的。
1 function Connect-Somewhere 2 { 3 [CmdletBinding(DefaultParameterSetName='A')] 4 param 5 ( 6 [Parameter(ParameterSetName='A',Mandatory=$false)] 7 [Parameter(ParameterSetName='B',Mandatory=$true)] 8 $ComputerName, 9 [Parameter(ParameterSetName='B',Mandatory=$false)] 10 $Credential 11 ) 12 $chosen = $PSCmdlet.ParameterSetName 13 “You have chosen $chosen parameter set.” 14 }
示例函数定义了两个参数集:A,B。
参数集A只有一个参数$ComputerName,且它是可选的。
参数集B有两个参数$ComputerName和$Credential。
如使用默认参数集A,函数不需要输入ComputerName参数,因为它不是必选的。
如使用参数$Credential,参数集被赋值为B,这时参数$ComputerName属性Mandatory=$true,这时强制使用$ComputerName了。
下面一个例子更详细演示:
1 function Test-ParameterSet 2 { 3 [CmdletBinding(DefaultParameterSetName = 'NonCredential')] 4 param 5 ( 6 $id, 7 8 [Parameter(ParameterSetName = 'LocalOnly', Mandatory = $false)] 9 $LocalAction, 10 11 [Parameter(ParameterSetName = 'Credential', Mandatory = $true)] 12 [Parameter(ParameterSetName = 'NonCredential', Mandatory = $false)] 13 $ComputerName, 14 15 [Parameter(ParameterSetName = 'Credential', Mandatory = $false)] 16 $Credential 17 ) 18 19 $PSCmdlet.ParameterSetName 20 $PSBoundParameters 21 22 if ($PSBoundParameters.ContainsKey('ComputerName')) 23 { 24 Write-Warning '远程调用' 25 } 26 }