【问题标题】:How to skip if user existing in ADgroup? (Active Directory Power Shell)如果用户存在于 AD 组中,如何跳过? (活动目录 Powershell)
【发布时间】:2018-10-03 08:17:00
【问题描述】:

如果电子邮件属性包含“abc.com”或“def.com”并且组中的现有用户将跳过该过程,我创建了一个 PS 脚本来将 ADusers 添加到组中。下面是我的脚本

import-module ActiveDirectory

$Users = Get-ADUser -Filter * -Properties emailaddress
$existingUsers = Get-ADgroupmember "Test_group"

foreach ($user in $Users) {
    #if user existing in the group, Skip this process
    if (($existingUsers | Where-Object { $_.sAMAccountName -eq $user.sAMAccountName }) -eq $null) {
        #if user email attribute contain "abc.com" or "def.com"
        if ($user.emailaddress -match "abc.com" -or $user.emailaddress -match "def.com") {
            $GroupMembers = Get-ADGroupMember -Identity "test_group" | Select -ExpandProperty SamAccountName
            if ($User.SamAccountName -NotContains $GroupMembers) {
                Add-ADGroupMember -Identity "test_group" -Members $User
            }
        }
    }
}

但是,执行后,有如下2个返回错误。

我在 ADWS 配置中添加了 "add key="MaxGroupOrMemberEntries" value="200000",但问题仍然存在。

Get-ADGroupMember:无法联系服务器。这可能是因为 此服务器不存在、当前已关闭或没有 Active Directory Web 服务正在运行。在 C:\scripts\AutoAddUserToGroup.ps1:15 字符:50 + $GroupMembers = 获取-ADGroupMember

Add-ADGroupMember : 指定的账户名已经是 C:\scripts\AutoAddUserToGroup.ps1:18 char:34 处的组 + 添加-ADGroupMember

【问题讨论】:

  • 这段代码根本没有效率,使用 Get-ADUser 和适当的过滤器,这就是你所需要的,几分钟后会发布一个示例。

标签: powershell active-directory


【解决方案1】:

正如所承诺的,请参见下面的示例,我使用Get-ADUser 命令的-Filter 参数仅返回我需要添加到Test_Group 的ADUsers。

#Clear Console
Clear-Host

#Import Modules
Import-Module ActiveDirectory

#Show verbose output
$VerbosePreference = 'Continue' 

#Script Settings
$EmailDomains = @('*@abc.com', '*@def.com') #EmailDomains to check for.
$ADGroup = "CN=Test_Group,OU=Groups,DC=corp,DC=company,DC=com" #Group Membership to check for.

#Create EmailDomains Filter for AD Query
$EmailDomains_Filter = ($EmailDomains | ForEach-Object {"(emailaddress -like '$($_)')"}) -join ' -or '

# Get AD users with specified emailadresses wich are not memberof specified group
$ADUsers = Get-ADUser -filter "($($EmailDomains_Filter)) -and (-not (MemberOf -eq '$($ADGroup)'))" -Properties emailaddress

#Show amount of users we need to add.
$ADUsers_Measure = $ADUsers | Measure-Object
Write-Verbose "Found $($ADUsers_Measure.Count) ADUsers that match EmailDomains_Filter but are not MemberOf $($ADGroup)"

要将用户添加到指定的组,您有 2 个选项,一次全部(更快)

Add-ADGroupMember -Identity $ADGroup -Members $ADUsers

或每个用户(更多控制)。

foreach ($ADUser in $ADUsers) {
    Write-Verbose "Adding User $($ADUser.SamAccountName) to group $($ADGroup)"
    Add-ADGroupMember -Identity $ADGroup -Members $ADUser
}

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多