Exchange-2010

如何在 Exchange 2010 中從 GAL 中自動刪除禁用的 AD 使用者

  • January 20, 2018

當員工出於任何原因離開我們的組織時,目前我們會禁用他們的 AD 帳戶,但不會立即將其刪除。但是,這樣做的問題是這些使用者仍然出現在全域地址列表中。

我確信有一個 PowerShell 腳本可以刪除它們,但我想讓事情變得更加精簡。

我希望這裡的某個人能夠提供一種更好的方法來禁用使用者,這將在此過程中自動將它們從 GAL 中刪除。

到目前為止,我能想到兩種可能的解決方案。

  1. 創建一個每小時執行一個 PS 腳本的腳本,該腳本將從 GAL 中刪除禁用的使用者。
  2. 使用 PS 命令同時禁用使用者並將其從 GAL 中刪除。

選項 2 可能是更好的選擇,所以如果有人可以提供幫助,我將不勝感激。

提前致謝。

無需重新發​​明輪子,在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

引用自:https://serverfault.com/questions/367694