Когда сотрудник по какой-либо причине покидает нашу организацию, в настоящее время мы отключаем его учетную запись AD, но не удаляем ее немедленно. Однако проблема в том, что эти пользователи все еще отображаются в глобальном списке адресов.
Я уверен, что есть сценарий PowerShell для их удаления, но я хотел бы упростить работу.
Я надеюсь, что кто-то здесь сможет предоставить лучший способ отключить пользователей, который автоматически удалит их из глобального списка адресов в процессе.
Пока я могу думать о двух возможных решениях.
Создайте сценарий, который запускает сценарий PS каждый час, удаляя отключенных пользователей из глобального списка адресов.
Используйте команду PS, которая одновременно отключит пользователя и удалит его из глобального списка адресов.
Вариант 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
Существует более простое решение, чем описанное выше, и его можно выполнить в две строки при использовании командлетов Quest AD PowerShell в консоли управления Exchange.
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"
Есть более простой способ:
hide from exchange address list
установите этот флажок.После этого никто не сможет видеть этого пользователя в глобальном списке адресов.
Скрыть отдельных пользователей из списка адресов
Единственного пользователя, имя которого известно, вы можете скрыть с помощью этой команды:
Set-ADUser "ваше имя пользователя" -Add @ {msExchHideFromAddressLists = "TRUE"}
Это может быть полезно, если вы создали сценарий для отключения бывших пользователей. В этом случае вы можете передать имя пользователя в переменной.
Запуск из командной консоли Exchange:
Get-Mailbox -ResultSize unlimited |Where{($_.UserAccountControl -like “AccountDisabled*”)} | set-mailbox -HiddenFromAddressListsEnabled $true