gpt4 book ai didi

Powershell:看似有效的参数集不起作用

转载 作者:行者123 更新时间:2023-12-02 23:44:17 24 4
gpt4 key购买 nike

我正在整理一套用于内部帐户管理的工具。此特定 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,它似乎是一个有效的参数集。输出。

最佳答案

感谢您的输出,这是关键(重点是我的):

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



这发生在所有参数都被绑定(bind)之后,它表明还有 3 个有效的参数集剩余。

转家驱动 是你想要的参数集。

那么为什么其他人在那里?

RetainGroupsWTrans 只有在 -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参数集也是如此,但上面没有显示。

关于Powershell:看似有效的参数集不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30405283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com