有時Powershell的函數(shù)需要互斥,讓用戶只能在其中二選一。
要給腳本創(chuàng)建一組互斥的參數(shù),可以給他們打上不同的屬性標志,同時確保它們的唯一性(假設(shè)不能自動識別參數(shù)類型).
function Test-ParameterSet
{
[CmdletBinding(DefaultParameterSetName='number')]
param
(
[int]
[Parameter(ParameterSetName='number', Position=0)]
$id,
[string]
[Parameter(ParameterSetName='text', Position=0)]
$name
)
$PSCmdlet.ParameterSetName
$PSBoundParameters
}
上面函數(shù)有兩個參數(shù),-id和-name.用戶只能使用其中一個,同時不能兩個都用。同時這里例子也教了大家怎么去獲取用戶輸入的參數(shù)。
多個互斥參數(shù)可以通過“ParameterSetName”來區(qū)分不同的參數(shù)設(shè)置(也包括集合參數(shù))
事實上你也可以分配多個參數(shù)跟一個參數(shù),即一個固定參數(shù)和一個可選參數(shù)。
function Test-ParameterSet
{
[CmdletBinding(DefaultParameterSetName='NonCredential')]
param
(
$id,
[Parameter(ParameterSetName='LocalOnly', Mandatory=$false)]
$LocalAction,
[Parameter(ParameterSetName='Credential', Mandatory=$true)]
[Parameter(ParameterSetName='NonCredential', Mandatory=$false)]
$ComputerName,
[Parameter(ParameterSetName='Credential', Mandatory=$false)]
$Credential
)
$PSCmdlet.ParameterSetName
$PSBoundParameters
if ($PSBoundParameters.ContainsKey('ComputerName'))
{
Write-Warning 'Remote Call!'
}
}
Test-ParameterSet 函數(shù)告訴你:當使用“NonCredential”時,-ComputerName是可選;當用戶使用“-Credential”參數(shù)時“-ComputerName”又變成必選參數(shù),如果使用了“-LocalAction”參數(shù),將不能使用-ComputerName和-Credential。