2015-05-22 3 views
1

Я собираю набор инструментов для внутреннего управления учетными записями. Этот конкретный командлет подготовит учетную запись для переноса, которая включает в себя возможность удаления или сохранения своих групп. Мой оператор Param стал довольно длинным и в итоге получил 6 наборов параметров для каждого сценария. Все комбинации параметров работают, кроме одного. Вот мой код:Powershell: похоже, правильный набор параметров не работает

function Move-AccountOut { 

    [CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')] 
    Param( 
     [Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True,Position=1)] 
     [string]$Username, 

     [Parameter(ParameterSetName='RetainGroups',Position=2)] 
     [Parameter(ParameterSetName='RetainGroupsWTran',Position=2)] 
     [switch]$RetainGroups, 

     [Parameter(ParameterSetName='RemoveFromAllGroups',Position=2)] 
     [Parameter(ParameterSetName='RemoveFromAllGroupsWTran',Position=2)] 
     [switch]$RemoveFromAllGroups, 

     [Parameter(ParameterSetName='TransferHomeDrive', Position=3)] 
     [Parameter(ParameterSetName='RetainGroupsWTran', Position=3)] 
     [Parameter(ParameterSetName='RemoveFromAllGroupsWTran', Position=3)] 
     [switch]$TransferHomeDrive, 

     [Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True, Position=4)] 
     [Parameter(ParameterSetName='RetainGroupsWTran', Mandatory=$True, Position=4)] 
     [Parameter(ParameterSetName='RemoveFromAllGroupsWTran', Mandatory=$True, Position=4)] 
     [string]$OldServer, 

     [Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True, Position=5)] 
     [Parameter(ParameterSetName='RetainGroupsWTran', Mandatory=$True, Position=5)] 
     [Parameter(ParameterSetName='RemoveFromAllGroupsWTran', Mandatory=$True, Position=5)] 
     [string]$NewServer 
    ) 
} 

Какой будет генерировать следующий Get-Help вывод:

Move-AccountOut [-Username] <string> [<CommonParameters>] 

Move-AccountOut [-Username] <string> [[-RetainGroups]] [[-TransferHomeDrive]] [-OldServer] <string> [-NewServer] <string> [<CommonParameters>] 

Move-AccountOut [-Username] <string> [[-RetainGroups]] [<CommonParameters>] 

Move-AccountOut [-Username] <string> [[-RemoveFromAllGroups]] [[-TransferHomeDrive]] [-OldServer] <string> [-NewServer] <string> [<CommonParameters>] 

Move-AccountOut [-Username] <string> [[-RemoveFromAllGroups]] [<CommonParameters>] 

Move-AccountOut [-Username] <string> [[-TransferHomeDrive]] [-OldServer] <string> [-NewServer] <string> [<CommonParameters>] 

Параметр У меня возникают проблемы с является нижняя (только передача). Я могу запустить команду с именем пользователя, именем пользователя + сохранить, имя пользователя + удалить, имя пользователя + сохранить + перенос и имя пользователя + удалить + перенос. Но передача без сохранения или удаления не работает. При запуске он выдает следующее сообщение об ошибке:

Move-AccountOut : Parameter set cannot be resolved using the specified named parameters. 
At line:33 char:1 
+ Move-AccountOut -Username X -TransferHomeDrive -OldServer X -NewServer Y 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [Move-AccountOut], ParameterBindingException 
    + FullyQualifiedErrorId : AmbiguousParameterSet,Move-AccountOut 

Я не могу понять, почему, учитывая, что, как представляется, является действительным параметром, устанавливаемым в соответствии с моим Get-Help выходом.

+0

Попробуйте сделать трассировку: 'Trace-Command -Name ParameterBinding -Expression {Move-AccountOut -Username X -TransferHomeDrive -OldServer X -NewServer Y} -PSHost' и опубликовать вывод. – briantist

+0

@briantist http://pastebin.com/NiKTCajP – RyanL

ответ

2

Спасибо за выход, вот ключ (курсив мой):

Remaining valid parameter set: RetainGroupsWTran
Remaining valid parameter set: RemoveFromAllGroupsWTran
Remaining valid parameter set: TransferHomeDrive

Это происходит после того, как все параметры были связаны, и это показывает, что существует 3 допустимых наборов параметров остальные.

TransferHomeDrive - это набор параметров, который вы хотите.

Так почему же другие там?

RetainGroupsWTranдолжны быть возможно только, если -RetainGroups указано, и RemoveFromAllGroupsWTranдолжны возможно только при условии -RemoveFromAllGroups указан.

Однако вы также можете увидеть в выводе Get-Help, что нет набора параметров, где эти переключатели являются обязательными, и в этом проблема.

Обновленное определение выглядит следующим образом:

function Move-AccountOut { 

    [CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')] 
    Param( 
     [Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True,Position=1)] 
     [string]$Username, 

     [Parameter(ParameterSetName='RetainGroups',Position=2)] 
     [Parameter(Mandatory=$true,ParameterSetName='RetainGroupsWTran',Position=2)] 
     [switch]$RetainGroups, 

     [Parameter(ParameterSetName='RemoveFromAllGroups',Position=2)] 
     [Parameter(Mandatory=$true,ParameterSetName='RemoveFromAllGroupsWTran',Position=2)] 
     [switch]$RemoveFromAllGroups, 

     [Parameter(ParameterSetName='TransferHomeDrive', Position=3)] 
     [Parameter(ParameterSetName='RetainGroupsWTran', Position=3)] 
     [Parameter(ParameterSetName='RemoveFromAllGroupsWTran', Position=3)] 
     [switch]$TransferHomeDrive, 

     [Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True, Position=4)] 
     [Parameter(ParameterSetName='RetainGroupsWTran', Mandatory=$True, Position=4)] 
     [Parameter(ParameterSetName='RemoveFromAllGroupsWTran', Mandatory=$True, Position=4)] 
     [string]$OldServer, 

     [Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True, Position=5)] 
     [Parameter(ParameterSetName='RetainGroupsWTran', Mandatory=$True, Position=5)] 
     [Parameter(ParameterSetName='RemoveFromAllGroupsWTran', Mandatory=$True, Position=5)] 
     [string]$NewServer 
    ) 
} 

Я сделал их обязательными в наборах параметров, которые были показаны в выводе трассировки.

Я думаю, что вы также должны сделать их обязательными в наборах параметров RetainGroups и RemoveFromAllGroups, но это не показано выше.

+0

Спасибо! Кажется, это делает трюк с одной причудой: когда я запускаю командлет с '-TransferHomeDrive' сам по себе, он по-прежнему вызывает неоднозначную ошибку набора параметров. Когда я запускаю его с '-OldServer' и' -NewServer', он работает нормально? Новый паштет: http://pastebin.com/bvm86Qac – RyanL

+0

'-OldServer' и' -NewServer' являются обязательными для набора параметров TransferHomeDrive.Я думаю, что в своем другом вопросе я помню, что сделал это предположение на основе того, что вы написали, но я не был уверен в этом. Пока эти параметры являются обязательными в этом наборе, вам необходимо указать их. Вы можете сделать их необязательными (только в 'TransferHomeDrive'), должны работать, но я не разработал, если будут какие-либо побочные эффекты. – briantist

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