2016-07-14 6 views
0

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

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" 

error as shown below in the image

Test-Script: набор параметров не могут быть решены с помощью указанных именованных параметров.
В строке: 1 символ: 1
+ Test-Script -source "C: \ somedirectory" -DestinationPath "C: \ someotherdirectory"
+ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Тест-скрипт], ParameterBindingException
+ FullyQualifiedErrorId: AmbiguousParameterSet, Тест-Script

ответ

2

в CmdletBinding() attribute должно выйдите за пределы блока 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 
) 
+0

Thanks Mathias !! что, похоже, решило проблему. – tarunmunjal

+0

Хорошая добыча! На мой взгляд, я уже разбирал различные наборы haha ​​ – briantist

+0

@briantist что-то в моем сознании начинало подергиваться, когда я видел 'param ([cmdl ...';) –

 Смежные вопросы

  • Нет связанных вопросов^_^