####################################################################################### # # Скрипт автоматического выключения учётных записей, удаления всех групп в которых # состоит учётная запись, переноса в 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