【问题标题】:Using Switch to Automate Adding User to Groups. Active Directory Powershell使用 Switch 自动将用户添加到组。活动目录 Powershell
【发布时间】:2020-06-17 13:37:23
【问题描述】:

我希望根据他们所在的分支机构和部门自动将新用户添加到他们所需的组中。我得到了这个工作,但我也想添加一些可选的子部门,用户可能会或可能不会分开,我只想添加属于这些子部门的任何用户被添加到包含所有组的最终数组用户需要分开。

因此用户将成为分支和部门的一部分,然后可以选择成为子部门的一部分。

我不知道该怎么做是如何切换这些子部门以使它们不相互排斥,即用户将拥有“客户经理”和“公司车辆”子部门,而这些子部门将各自有几个组将作为 $SubGroups 应用到最后

基本上我希望子部门是可选的,但也可以一次选择多个,这样我之后的任何人都可以添加他们想要的任何东西,脚本不会中断

例如,这些是子部门

  • 客户经理

  • 内部销售支持

  • 学校销售

  • 公司车辆的员工

  • 远程访问

    这些子部门中的每一个都有几个可以作为 $SubGroups 应用到最后的组

最后的参考组通过将参考组(用户应该在的组)与用户当前所在的组进行比较来自动化组成员身份。然后根据需要添加/删除。 这部分我已经有了,我只是把它从末端切下来让它变小一点。

这是我目前所拥有的:

$User = $_.user
$Department = $_.OrgDepartmentName
$Branch = $_.Branch
Switch ($Department) {
    Sales {
        $DepartmentGroups = @(
            "Sales Team"
        )
    }
    Services {
        $DepartmentGroups = @(
            "Services Team"
        )
    }
    Admin {
        $DepartmentGroups = @(
            "Admin Team"
        )
    }
}
Switch ($Branch) {
    Christchurch {
        $BranchGroups = @(
            "Christchurch Team",
            "Christchurch Admin"
        )
    }
    Auckland {
        $BranchGroups = @(
            " Auckland Team",
            " Auckland Admin"
        )
    }
    Wellington {
        $BranchGroups = @(
            "Wellington Team",
            "Wellington Admin"
        )
    }
    Dunedin {
        $BranchGroups = @(
            "Dunedin Team",
            "Dunedin Admin"
        )
    }
}
$AllCompanyGroups = @(
    "All Company"
    "All Staff"
)
$UserGroups = $AllCompanyGroups + $DepartmentGroups + $BranchGroups + $Subgroups
$UserGroups = $ReferenceGroups
$UserGroups

【问题讨论】:

  • 问题是什么?看起来没什么问题
  • 我已经完成了用户组比较部分,我不确定将第四部分添加到 $usergroups,这将有一个可以触发多次的开关,而不是像排他性的那样我拥有的那些,即如果 somone 有一辆公司的汽车,并且是一名客户经理,我想为此添加开关,我不知道如何形成非专有开关。
  • 看到get-help while?你想让它循环特定的次数吗? get-help for?

标签: powershell active-directory


【解决方案1】:

我认为下面应该做你想做的事情。您仍然需要一种为 $Selection 生成项目的方法

 [System.Collections.ArrayList]$SubGroup = @()
 $Selection = "Account Managers", "Internal Sales Support"

 Switch ($Selection) {
    "Account Managers" {$SubGroup.Add("AMGroup1")
                        $SubGroup.Add("AMGroup2")}
    "Internal Sales Support" {$SubGroup.Add("Internal Sales Support")}
    "School Sales" {$SubGroup.Add("School Sales")}
    "Staff with a company Vehicle" {$SubGroup.Add("CarGroup1")
                                    $SubGroup.Add("CarGroup2")}
    }

 $SubGroup

【讨论】:

    【解决方案2】:

    我认为您是在寻求有关后续步骤的建议。如果我没看错,您希望将 $UserGroups 与 $ReferenceGroups 进行比较,以查看需要将用户添加到哪些组或从中删除。

    如果我做对了,你可以试试Compare-Object,它很棒而且非常容易比较数组。喜欢:

    $Compare = Compare-Object $ReferenceGroups $UserGroups
    $Adds    = ( $Compare | Where-Object{ $_.SideIndicator = '<=' } ).InputObject
    $Removes = ( $Compare | Where-Object{ $_.SideIndicator = '=>' } ).InputObject
    

    如果您只想将 $UserGroups 附加到 $ReferenceGroups,您可以使用 += 运算符。

    $UserGroups += $ReferenceGroups
    

    注意:通常最好在追加时使用 ArrayList, 但这是另一个话题。

    现在 $ReferenceUsers 将为空,所以 $UserGroups = $ReferenceGroups 最终会为空 $UserGroups

    另外,这不是功能问题,但鉴于您没有为部门或分支组附加数组,您可能希望将 Break 语句放在每个 switch 块中,例如:

    Christchurch {
        $BranchGroups = @(
            "Christchurch Team",
            "Christchurch Admin"
        )
        Break
    }
    

    这将停止不必要的评估。

    【讨论】:

    • 抱歉,我已经得到了那个部分,但是为了使脚本更小,我已经澄清了我的问题,以避免未来的混乱,不过谢谢你,你提供的比下一个我看得很糟糕的迂回方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    相关资源
    最近更新 更多