小编Rya*_*anL的帖子

Powershell:多个参数集

我正在构建一个具有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)

powershell

19
推荐指数
2
解决办法
1万
查看次数

如果设置了数据类型,则参数值不能设置为null

我刚刚输入一个很长的问题,只是在我发布之前自己找出答案.但是,它仍然不是一个完美的解决方案,我想知道我是否能得到解释为什么以下不起作用.

我想要做的是有一个可选参数,如果没有设置,将为null.我希望该参数是一个字符串.

所以我会做这样的事情:

function myfunction {
    param([string]$x = $null)
    set-aduser -identity someuser -officephone $x
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,它似乎$x永远不会为null,即使我稍后在代码中明确设置它.如果我要删除[string],它工作正常.只是想知道为什么会这样.这不是什么大问题,但我不明白为什么它不起作用.

powershell

3
推荐指数
1
解决办法
638
查看次数

标签 统计

powershell ×2