当员工因任何原因离开我们的组织时,我们目前会禁用他们的 AD 帐户,但不会立即删除它。然而,这样做的问题是这些用户仍然出现在全局地址列表中。
我确信有一个 PowerShell 脚本可以删除它们,但我想让事情变得更简化。
我希望这里有人能够提供一种更好的方法来禁用用户,并在此过程中自动将他们从 GAL 中删除。
到目前为止,我能想到两个潜在的解决方案。
创建一个脚本,每小时运行一次 PS 脚本,从 GAL 中删除已禁用的用户。
使用 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
有一个更简单的方法:
- 转到 EMC > 用户邮箱 > 属性
- 在常规选项卡中您将看到一个复选框
hide from exchange address list
,选中此复选框。 - 点击应用
此后,没有人能够在 GAL 中看到该用户。
答案4
从 Exchange 命令行管理程序运行:
Get-Mailbox -ResultSize unlimited |Where{($_.UserAccountControl -like “AccountDisabled*”)} | set-mailbox -HiddenFromAddressListsEnabled $true