#######################################################################################
#
# Скрипт автоматического выключения учётных записей, удаления всех групп в которых
# состоит учётная запись, переноса в OU для отключенных учётных записей и скрытия
# учётной записи из общей адресной книги MS Exchange
#
#######################################################################################
cls
#Импортируем модуль для работы с AD удалённо
Import-Module ActiveDirectory
#Импортируем командлеты Exchange
$exch = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exchange/powershell
Import-PSSession $exch -CommandName Get-Mailbox,Set-Mailbox -AllowClobber
$programmName = "RemoveUsers"
#Импортируем информацию о пользователях из файла в переменную
$users = Import-Csv "D:\scripts\ps\users.csv" -Delimiter ";"
#Преобразуем дату в нужный формат
$date = Get-Date -Format "yyyy-MM-dd"
#Путь OU для выключенных аккаунтов
$pathOU = "OU=Disable Users,DC=domain,DC=ru"
#Директория куда пишется логи
$logFile = "D:\scripts\ps\" + $date + "_" + $programmName + ".log"
#Функция записи логов в файл
function writeLog ($type, $msg) {
#Преобразуем дату и время в нужный формат
$date = Get-Date -Format "dd.MM.yyyy HH:mm:ss"
$msg = $date + "`t" + $type + "`t" + $msg
#Записываем сообщение в файл
Out-File -FilePath $logFile -InputObject $msg -Append -encoding unicode
}
#Функция получения логина пользователя
function getLogin ($userName, $jobTitle) {
try {
#Если пользователь с указанным именем и должность есть в AD, записываем его логин в переменную и возвращаем её
$login = (Get-ADUser -Filter {DisplayName -eq $userName -and Title -eq $jobTitle}).SamAccountName
if ($login -ne $null) {
$type = "OK `t getLogin `t"
$msg = "Логин $userName - $login"
writeLog $type $msg
return $login
}
else {
$type = "Info `t getLogin `t"
#$msg = "Пользователь $userName в должности $jobTitle не найден"
$msg = "$_"
writeLog $type $msg
}
}
catch {
$type = "Error `t getLogin `t"
#$msg = "Пользователь $userName в должности $jobTitle не найден"
$msg = "$_"
writeLog $type $msg
break
}
}
#Функция получения объекта ADUser
function getAccount ($userName, $jobTitle) {
try {
#Если пользователь с указанным именем и должность есть в AD, записываем его в переменную и возвращаем её
$account = Get-ADUser -Filter {DisplayName -eq $userName -and Title -eq $jobTitle}
return $account
}
catch {
$type = "Error `t getAccount `t"
$msg = "$_"
writeLog $type $msg
break
}
}
#Функция выключения учётной записи
function disableUser ($login) {
try {
Set-ADUser $login -Enabled $false
$type = "OK `t disableUser `t"
$msg = "Учётная запись пользователя $login отключена"
writeLog $type $msg
}
catch {
$type = "Error `t disableUser `t"
$msg = "$_"
writeLog $type $msg
break
}
}
#Функция удаления пользователя их всех групп в которых он состоит
function removeGroupsOfMember ($login) {
try {
$groupsOfMember = Get-ADUser -Filter {SamAccountName -eq $login} -Properties MemberOf
#Если переменная существует
if ($groupsOfMember) {
foreach ($group in $groupsOfMember.memberof) {
#Удаляем группы
Remove-ADGroupMember -Identity $group -Members $groupsOfMember -Confirm:$false
$type = "OK `t removeGroupsOfMember"
$msg = "Учётная запись пользователя $login удалена из групп(ы): $group"
writeLog $type $msg
}
}
else {
$type = "Info `t removeGroupsOfMember"
#$msg = "Групп не найдено"
$msg = "$_"
writeLog $type $msg
}
}
catch {
$msg = "$_"
$type = "Error `t removeGroupsOfMember"
writeLog $type $msg
break
}
}
#Функция переноса учётной записи
function moveToOU($user, $pathOU) {
try {
#Переносим учётную запись пользователя в OU указанный в pathOU
Move-ADObject $user -TargetPath $pathOU
$msg = "Учётная запись $login перенесена в $pathOU"
$type = "OK `t moveToOU `t"
writeLog $type $msg
}
catch {
$msg = "$_"
#$msg = "Учётная запись $login не перенесена"
$type = "Error `t moveToOU `t"
writeLog $type $msg
break
}
}
#Функция скрывает e-mail адрес пользователя из общей адресной книги
function hiddenAddressList ($login) {
try {
#Скрываем e-mail адрес из общей адресной книги
Set-Mailbox -HiddenFromAddressListsEnabled $true -Identity $login
$type = "OK `t hiddenAddressList"
$msg = "Почтовый ящик пользователя $login удалён из адресной книги"
writeLog $type $msg
}
catch {
$type = "Error `t hiddenAddressList"
#$msg = "Почтовый ящик пользователя $login не удалён из адресной книги"
$msg = "$_"
writeLog $type $msg
break
}
}
#Главная функция
function main {
try {
foreach($user in $users) {
$login = getLogin $user.Name $user.JobTitle
$account = getAccount $user.Name $user.JobTitle
disableUser $login
removeGroupsOfMember $login
moveToOU $account $pathOU
hiddenAddressList $login
}
$type = "OK `t main `t`t"
$msg = "$_"
#$msg = "Скрипт выполнился успешно"
writeLog $type $msg
#закрываем сессию с exchange
Remove-PSSession $exch
}
catch {
$type = "Error `t main `t`t"
$msg = "$_"
writeLog $type $msg
break
}
}
main