我正在整理一套内部帐户管理工具。此特定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
输出,它似乎是一个有效的参数集。
答案 0 :(得分:2)
感谢您输出,这是关键(强调我的):
剩余的有效参数集: RetainGroupsWTran
剩余的有效参数集: RemoveFromAllGroupsWTran
剩余的有效参数集: 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
参数集中强制使用它们,但上面没有显示它。