到目前为止我读过的所有内容都告诉我这应该有效。这是一个用于自动转出AD帐户的脚本。我希望它能如何工作,如果设置了-TransferHomeDrive开关,那么它将需要旧服务器和新服务器的名称。
我相信我应该可以使用参数集来执行此操作,但是如果我只有单个参数集,加上默认参数,它将始终提示我输入旧的和新的服务器。这是我的param
声明:
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[string]$Username,
[switch]$RetainGroups,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$False)]
[switch]$TransferHomeDrive,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$NewServer
)
所以,如果它正常工作,你可以运行
Move-AccountOut -Username JohnSmith -RetainGroups
它不会安排家庭驱动器转移。但是,如果你要运行
Move-AccountOut -Username JohnSmith -RetainGroups -TransferHomeDrive
它会提示OldServer
和NewServer
。
我发现了类似的问题,包括这些问题,但它仍无效:
PowerShell mandatory parameter depend on other parameter
Having a optional parameter that requires another parameter to be present
我相信如果我创建了第二个参数集,包括所有参数,包括Username
和RetainGroups
,它会起作用,但似乎根据其他帖子,我应该能够让它按照我写的方式工作,其中Username
和RetainGroups
是"全球"参数以及OldServer
和NewServer
仅在设置TransferHomeDrive
时才需要
答案 0 :(得分:1)
在您的代码中,您只有一个参数集TransferHomeDrive
,您没有设置其他默认参数。您应该让PowerShell知道,存在另一个命名参数集,方法是在CmdletBinding
或Parameter
属性中明确声明它。
[CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')]
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[string]$Username,
[switch]$RetainGroups,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$False)]
[switch]$TransferHomeDrive,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$NewServer
)