Набор параметров Powershell по умолчанию не работает. ошибка

Я пытаюсь использовать набор параметров и использовать набор параметров по умолчанию. Но набор параметров по умолчанию, похоже, не работает для меня. Любая помощь горячо приветствуется. Я могу легко использовать набор проверки с действием по умолчанию, но я хочу знать, что я здесь делаю неправильно.

Param([cmdletbinding(DefaultParametersetname="Directory")] 
      [Parameter(Mandatory=$false,ParameterSetName="File")]
      [switch]$file, 
      [Parameter(Mandatory=$false,ParameterSetName="Directory")]  
      [switch]$directory,

[Parameter(Mandatory=$false,ParameterSetName="File")] 
[Parameter(Mandatory=$false,ParameterSetName="Directory")] 
[string]$Source,
[Parameter(Mandatory=$true,ParameterSetName="File")]  
[Parameter(Mandatory=$true,ParameterSetName="Directory")] 
[string]$DestinationPath, 
[Parameter(Mandatory=$false,ParameterSetName="Directory")] 
[Parameter(Mandatory=$false,ParameterSetName="File")]
[array]$Servers

PS C:\> Test-Script -Source "c:\somedirectory" -DestinationPath "c:\someotherdirectory"

ошибка, как показано ниже на изображении

Test-Script: набор параметров не может быть разрешен с использованием указанных именованных параметров.
At line:1 char:1
+ Test-Script -Source "c:\somedirectory" -DestinationPath "c:\someotherdirectory"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-Script], ParameterBindingException< br> + FullyQualifiedErrorId: AmbiguousParameterSet, Test-Script


person tarunmunjal    schedule 14.07.2016    source источник


Ответы (1)


Атрибут CmdletBinding() должен находиться за пределами блока param, непосредственно перед param ключевое слово, иначе оно просто будет проигнорировано:

[CmdletBinding(DefaultParametersetname="Directory")]
Param(
    [Parameter(Mandatory=$false,ParameterSetName="File")]
    [switch]$file, 

    [Parameter(Mandatory=$false,ParameterSetName="Directory")]
    [switch]$directory,

    [Parameter(Mandatory=$false,ParameterSetName="File")]
    [Parameter(Mandatory=$false,ParameterSetName="Directory")]
    [string]$Source,

    [Parameter(Mandatory=$true,ParameterSetName="File")]
    [Parameter(Mandatory=$true,ParameterSetName="Directory")]
    [string]$DestinationPath,

    [Parameter(Mandatory=$false,ParameterSetName="Directory")]
    [Parameter(Mandatory=$false,ParameterSetName="File")] 
    [array]$Servers
)
person Mathias R. Jessen    schedule 14.07.2016
comment
Спасибо, Матиас!! это, кажется, решило проблему. - person tarunmunjal; 15.07.2016
comment
Хороший улов! В уме я уже разбирал различные наборы, ха-ха - person briantist; 15.07.2016
comment
@briantist что-то у меня в голове начало дергаться, когда я увидел param([cmdl... ;) - person Mathias R. Jessen; 15.07.2016