1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

PowerShell パラメータの相互排除の例

2022-02-04 01:14:19

PowerShell関数内でパラメータを相互に排他的にしたい場合、"ParameterSetName"属性を使用して、異なるパラメータまたはパラメータセットでパラメータ属性を定義することが可能です。

 PowerShellの関数では、同じパラメータ名で複数のパラメータ属性を定義できることに、多くの人は気づいていないかもしれません。つまり、mandatoryを使えば、あるパラメータをあるシナリオでは必須、別のシナリオではオプションとすることができます。

function Test-ParameterSet
{
[CmdletBinding(DefaultParameterSetName='NonCredential')]
param
(
$id,
 
[Parameter(ParameterSetName='LocalOnly', Mandatory=$false)]
$LocalAction,
 
[Parameter(ParameterSetName='Credential', Mandatory=$true)]
[Parameter(ParameterSetName='NonCredential', Mandatory=$false)] $LocalAction, [Parameter(ParameterSetName='Credential', Mandatory=$false)]
$ComputerName,
 
[Parameter(ParameterSetName='Credential', Mandatory=$false)] $ComputerName, [Parameter(ParameterSetName='Credential', Mandatory=$false)]
$Credential
)
 
$PSCmdlet.ParameterSetName
$PSBoundParameters
 
if ($PSBoundParameters.ContainsKey('ComputerName'))
{
Write-Warning 'Remote Call'
}
}


上記の関数Test-ParameterSetは、パラメータ"NonCredential"がアクティブな場合、-ComputerNameはオプションのパラメータであることを示します。Credentialパラメータを使用すると、-ComputerNameは必須パラメータになります。そして、-LocalActionパラメータを使用すると、-ComputerNameと-Credentialは両方ともオプションになります。