|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Поиск пользователя в AD |
|
|
PowerShell - [решено] Поиск пользователя в AD
|
Старожил Сообщения: 208 |
Доброго времени суток.
Задача написать скрипт который выключал бы учётные записи найденные по информации из .csv файла. Файл .csv следующего содержания (поля могут добавляться, но я думаю, что этих двух полей для идентификации нужного пользователя хватит): Name;JobTitle Иванов Иван Иванович;бухгалтер Петров Пётр Петрович;менеджер Полю Name из файла в AD соответствует поле Display name Вопрос, возможно ли по данной информации найти пользователя во всём домене, а не в конкретном OU? Есть вот тестовый код: cls Import-Module ActiveDirectory $Users = Import-Csv "D:\scripts\ps\users.csv" -Delimiter ";" #$Global:count = 0 function disableUser ($UserName, $JobTitle) { Write-Host ('User: ' + $UserName) Write-Host ('JobTitle: ' + $Jobtitle) Get-ADUser $UserName | Set-ADUser -Enabled $false #$Global:count = $Global:count + 1 } function main { foreach($User in $Users) { disableUser $User.Name $User.JobTitle } } main #Write-Host ('count: ' + $Global:count) Цитата:
|
||
Отправлено: 10:38, 23-10-2013 |
Старожил Сообщения: 208
|
Профиль | Отправить PM | Цитировать Цитата:
Это лечится каким-нибудь $exch.close или всё глобальнее? И как я могу закрыть уже открытые 18 сессий? |
|
Отправлено: 11:23, 28-10-2013 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Добавить в конец скрипта - Remove-PSSession $exch
|
Отправлено: 11:54, 28-10-2013 | #22 |
Старожил Сообщения: 208
|
Профиль | Отправить PM | Цитировать Вроде допилил скрипт, может кому пригодится.
Отдельная благодарность пользователю Kazun за помощь в написании скрипта. Действия скрипта написаны в его описании, формат файла .csv следующий: Цитата:
####################################################################################### # # Скрипт автоматического выключения учётных записей, удаления всех групп в которых # состоит учётная запись, переноса в 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 |
|
Последний раз редактировалось pogo, 29-10-2013 в 15:45. Отправлено: 09:56, 29-10-2013 | #23 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - Создание пользователя AD | garbals | Скриптовые языки администрирования Windows | 7 | 22-11-2013 13:12 | |
Поиск принтеров через AD (проблема) | -KeyMaster- | Microsoft Windows NT/2000/2003 | 12 | 29-06-2012 11:41 | |
PowerShell - Поиск в определенной группе конкретного пользователя | ejik_off | Скриптовые языки администрирования Windows | 1 | 26-12-2011 10:15 | |
PowerShell - [решено] Создания пользователя в AD | ejik_off | Скриптовые языки администрирования Windows | 7 | 09-12-2011 07:20 | |
Права пользователя без AD | goshargh | Microsoft Windows 2000/XP | 6 | 02-08-2006 10:28 |
|