如何在 Exchange 2010 中从 GAL 自动删除已禁用的 AD 用户

如何在 Exchange 2010 中从 GAL 自动删除已禁用的 AD 用户

当员工因任何原因离开我们的组织时,我们目前会禁用他们的 AD 帐户,但不会立即删除它。然而,这样做的问题是这些用户仍然出现在全局地址列表中。

我确信有一个 PowerShell 脚本可以删除它们,但我想让事情变得更简化。

我希望这里有人能够提供一种更好的方法来禁用用户,并在此过程中自动将他们从 GAL 中删除。

到目前为止,我能想到两个潜在的解决方案。

  1. 创建一个脚本,每小时运行一次 PS 脚本,从 GAL 中删除已禁用的用户。

  2. 使用 PS 命令将同时禁用用户并将其从 GAL 中删除。

选项 2 可能是更好的选择,因此如果有人可以提供帮助,我将不胜感激。

提前致谢。

答案1

无需重新发明轮子,找到了这个优雅的解决方案petri.co.il

# http://www.petri.co.il/forums/showthread.php?p=109975 
# usage: Disable-User [accountname] [enable/disable]

function get-dn ($SAMName)    {
    $root = [ADSI]''
     $searcher = new-object System.DirectoryServices.DirectorySearcher($root)
    $searcher.filter = "(&(objectClass=user)(sAMAccountName= $SAMName))"
    $user = $searcher.findall()

    if ($user.count -gt 1)      {     
            $count = 0
                foreach($i in $user)            { 
            write-host $count ": " $i.path 
                    $count = $count + 1
                }

            $selection = Read-Host "Please select item: "
        return $user[$selection].path

          }      else      { 
          return $user[0].path
          }
}

$Name = $args[0]
$status = $args[1]
$path = get-dn $Name

if ($path -ne $null)    {

    "'" + $path + "'"  
    if ($status -match "enable")     {
        # Enable the account
        $account=[ADSI]$path
        $account.psbase.invokeset("AccountDisabled", "False")
        $account.setinfo()
        Set-Mailbox "$Name" -HiddenFromAddressListsEnabled $False
    }    else    {
        # Disable the account
        $account=[ADSI]$path
        $account.psbase.invokeset("AccountDisabled", "True")
        $account.setinfo()
        Set-Mailbox "$Name" -HiddenFromAddressListsEnabled $True
    }
}    else    {
    write-host "No user account found!" -foregroundcolor white -backgroundcolor red
}

另存为Disable-User.ps1并运行.\Disable-User.ps1 SAMaccountname disable

答案2

有一个比上面的解决方案更简单的解决方案,在 Exchange 管理控制台中使用 Quest AD PowerShell 命令行仅需两行即可完成。

param(
[string]$username = $(throw "A user ID is required.") #throw exception if no value provided
)

Disable-QADUser -Identity $username -service "dc.domain.local:389"
Set-Mailbox  -identity "domain\$username" -HiddenFromAddressListsEnabled $true -DomainController "dc.domain.local"

答案3

有一个更简单的方法:

  1. 转到 EMC > 用户邮箱 > 属性
  2. 在常规选项卡中您将看到一个复选框hide from exchange address list,选中此复选框。
  3. 点击应用

此后,没有人能够在 GAL 中看到该用户。

答案4

从 Exchange 命令行管理程序运行:

Get-Mailbox -ResultSize unlimited |Where{($_.UserAccountControl -like “AccountDisabled*”)} | set-mailbox -HiddenFromAddressListsEnabled $true

相关内容