我正在构建一个具有3个不同参数集的函数,其中2个与第3个集重叠.选项看起来像这样:
A B
A C
A (D E F)
A B (D E F)
A C (D E F)
Run Code Online (Sandbox Code Playgroud)
为了使它更清晰,这里是一个部分完成的版本功能:
function Move-AccountOut {
[CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')]
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[string]$Username,
[Parameter(ParameterSetName='RetainGroups')]
[switch]$RetainGroups,
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[switch]$RemoveFromAllGroups,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$False)]
[switch]$TransferHomeDrive,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$NewServer
)
}
Run Code Online (Sandbox Code Playgroud)
该功能的目的是自动化将AD帐户转出到公司内的其他位置的过程.RetainGroups将在设置时自动保留用户组,RemoveFromAllGroups将自动从其组中删除用户.两个开关不能一起使用.此外,如果TransferHomeDrive设置,它将调用一个函数来使用内部工具安排传输.
换一种方式,RetainGroups而RemoveFromAllGroups应该是所有参数集(类似于成员Username),但不应该是能够一起使用.
我试过两种方法.首先:
function Move-AccountOut {
[CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')]
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[string]$Username,
[Parameter(ParameterSetName='RetainGroups')]
[switch]$RetainGroups,
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[switch]$RemoveFromAllGroups,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$False)]
[Parameter(ParameterSetName='RetainGroups')]
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[switch]$TransferHomeDrive,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroups')] …Run Code Online (Sandbox Code Playgroud) 我刚刚输入一个很长的问题,只是在我发布之前自己找出答案.但是,它仍然不是一个完美的解决方案,我想知道我是否能得到解释为什么以下不起作用.
我想要做的是有一个可选参数,如果没有设置,将为null.我希望该参数是一个字符串.
所以我会做这样的事情:
function myfunction {
param([string]$x = $null)
set-aduser -identity someuser -officephone $x
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,它似乎$x永远不会为null,即使我稍后在代码中明确设置它.如果我要删除[string],它工作正常.只是想知道为什么会这样.这不是什么大问题,但我不明白为什么它不起作用.
powershell ×2