【发布时间】:2015-05-23 04:53:21
【问题描述】:
我正在整理一套用于内部帐户管理的工具。此特定 cmdlet 将为转出准备一个帐户,其中包括删除或保留其组的选项。我的Param 语句已经变得相当冗长,最终得到了 6 个参数集来涵盖所有场景。除了一个之外,所有参数组合都有效。这是我的代码:
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 输出,它似乎是一个有效的参数集。
【问题讨论】:
-
尝试跟踪:
Trace-Command -Name ParameterBinding -Expression { Move-AccountOut -Username X -TransferHomeDrive -OldServer X -NewServer Y } -PSHost并发布输出。 -
@briantist pastebin.com/NiKTCajP
标签: powershell