Главная > Powershell > Работа с объектами Active Directory через Powershell

Работа с объектами Active Directory через Powershell

В один прекрасный день рассматривая свою базу учётных записей пользователей домена словил себя на мысли, что отключённые записи мешают сосредоточиться и отвлекают своим значком с красным крестом. Поэтому решил перенести эти “мёртвые души” в отдельное, специально для них созданное OU.

Перетаскивать по одному долго, лениво и неразумно, и на помощь как всегда пришёл Powershell. Так как  домен, с которым пришлось возиться работает под управлением Windows Server 2003, то и стандартных командлетов Powershell для работы с Active Directory нет.

Примерно в то же время узнал, что компания Quest Software разработала командлеты, позволяющие упростить работу с объектами AD. Немного поигравшись с этими командлетами убедился в том, что они облегчают работу с объектами AD настолько, насколько Powershell вообще облегчает жизнь сисадмина.

В очередной раз занимаясь перетаскиванием пользователей решил поделиться этим с общественностью.

Предварительно эти командлеты нужно скачать и установить.

После чего нужно добавить оснастку для работы с AD:

Add-PSSnapin Quest.ActiveRoles.ADManagement

Командлеты из этой оснастки имеют тот же формат, что и стандартные командлеты: глагол-существительное, но перед существительным стоит приставка QAD (Q – от Quest Software, и AD, как-бы намекая на то, что они предназначены для работы с Active Directory), например: Get-QADUser, New-QADGroup.

Посмотреть все команды из оснастки можно выполнив команду:

Get-Command -PSSnapin Quest.ActiveRoles.ADManagement

Для перемещения объектов используется командлет Move-QADObject. Кстати, создать OU можно не выходя из Powershell:

# Создать новое OU
New-QADObject -Name "DisabledUsers" -Type organizationalUnit `
    -ParentContainer "domain.local/" -Description "Отключённые пользователи"

# Перенести отключённых пользователей в другое OU
Get-QADUser -Disabled |
    Move-QADObject -NewParentContainer 'domain.local/DisabledUsers'

Первая команда создаёт новое организационное подразделение DisabledUsers в домене domain.local.

Вторая команда выбирает из всех пользователей только отключённых, и передаёт их по конвейеру командлету Move-QADObject, который и перемещает их,  в созданное на предыдущем шаге подразделение.

Поиск “мёртвых душ” в Active Directory

Пользователи приходят и уходят (на больничные, в командировки, увольняются), а их учётные записи болтаются в домене, как неприкаянные души.

Узнать, что учётная запись не используется можно посмотрев на время последнего входа пользователя в систему. Думаю, не ошибусь если скажу, что в большинстве организаций админ далеко не первый человек, которому сообщают (если вообще сообщают), что человека нет на работе, и естественно, что разбираться с каждым пользователем отдельно это весьма утомительное занятие. Поэтому я предлагаю всех пользователей, не логинившихся в течении определённого промежутка времени (например, 20 дней) отключить, а уже потом разбираться.

Время последнего входа хранится в свойстве LastLogon. Для того, чтобы определить кто из пользователей не логинился дольше указанного времени нужно у всех просмотреть этот самый LastLogon, и у кого он меньше выбранного значения отключить (хотя лучше для начала просмотреть кого собираемся отключать, или показать начальству список “трудоголиков” :)).

# Ищем пользователей, не логинившихся больше 20 дней
$date = (Get-Date).AddDays(-20)
$hard_workers = Get-QADUser | Where-Object {$_.LastLogon -le $date}

# Выводим в .htm Файл имена этих пользователей и время последнего входа
$hard_workers | Select-Object name, lastlogon | ConvertTo-Html |
    Out-File users.htm

# Отключаем пользователей
$hard_workers | Disable-QADUser

После чего, их можно, например, положить в кучку ко всем остальным изгоям отключённым юзерам, способом, который был показан в начале статьи, где они будут спокойно лежать до судного дня дальнейшего разбирательства.

Реклама
Рубрики:Powershell Метки: ,
  1. Андрей Лукьянов
    13/01/2012 в 13:25

    Привет. Сегодня как раз писал про lastlogon, использовать его несовсем правильно:
    http://wp.me/p24Lu7-21

    • 14/01/2012 в 12:11

      Совершенно верно, в общем случае именно так (как по ссылке).
      Я просто не уточнил, что в моём случае был всего один контроллер домена, и работал он в режиме Windows 2000, и lastLogontimeStamp у всех объектов пустой.
      Спасибо за замечание 🙂
      Кстати, там в строке «7. Если X > Y – не обновляем lastLogontimeStam» буква «p» в конце выпала 🙂

  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: