Поиск пользователя в AD powershell

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

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.