パラメーター セットを使用して、相互に排他的なスクリプトの呼び出し方法があることを PowerShell に伝える必要があります。つまり、スイッチと文字列を同時に使用することはできません。これらのセットは、両方の位置を設定し、インデックス 0 にすることもできます。$bar
スイッチ$filepath
は、バインダーにとってあいまいではなく、どこにでも配置できるため、位置的に配置する必要はありません。また、各セットの少なくとも 1 つのパラメーターは必須である必要があります。
function test-set {
[CmdletBinding(DefaultParameterSetName = "BarSet")]
param(
[parameter(
mandatory=$true,
parametersetname="FooSet"
)]
[switch]$Foo,
[parameter(
mandatory=$true,
position=0,
parametersetname="BarSet"
)]
[string]$Bar,
[parameter(
mandatory=$true,
position=1
)]
[io.fileinfo]$FilePath
)
@"
Parameterset is: {0}
Bar is: '{1}'
-Foo present: {2}
FilePath: {3}
"@ -f $PSCmdlet.ParameterSetName, $bar, $foo.IsPresent, $FilePath
}
この属性は、関数がパラメーターなしCmdletBinding
で呼び出された場合に、どのパラメーター セットをデフォルトにするかを指定するために必要です。
上記の構成の構文ヘルプは次のとおりです。
PS> test-set -?
NAME
test-set
SYNTAX
test-set [-Bar] <string> [-FilePath] <FileInfo> [<CommonParameters>]
test-set [-FilePath] <FileInfo> -Foo [<CommonParameters>]
そして、さまざまな呼び出しの出力は次のとおりです。
PS> test-set barval C:\temp\foo.zip
Parameterset is: BarSet
Bar is: 'barval'
-Foo present: False
FilePath: C:\temp\foo.zip
PS> test-set -foo c:\temp\foo.zip
Parameterset is: FooSet
Bar is: ''
-Foo present: True
FilePath: c:\temp\foo.zip
お役に立てれば。