Блог did5.ru

Про АйТи и около айтишные темы

[PowerShell] Задать атрибут Department (Отдел) всем учетным записям в AD

Комментариев нет

Исторически сложилось, что у всех учетных записи домена ActiveDirectory не заполнен атрибут «Отдел» («Department»). Информация об отделе записывалась в атрибут «Описание» и «Должность». Пример: «инженер-проектировщик 2 категории отдела 500». Практически все отделы имеют название вида: 500, 700, 990 и т.д. Начальством поставлена задача в кратчайшие сроки заполнить атрибут «Отдел» и удалить информацию об отделе из атрибутов «Описание» и «Должность».

Для решения задачи выбрал PowerShell, вот что получилось...

# Нацеливаем скрипт на контейнер с учетными записями в домене Contoso.com
$path = [ADSI]"LDAP://ou=Users,dc=Contoso,dc=com"
$obj = New-Object System.DirectoryServices.DirectorySearcher($path ,"(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(title=*)))")
# используем фильтр для поиска только незаблокированных учетных записей с заполненным атрибутом должность(title)
$users = $obj.FindAll()

ForEach ($user in $users) {
$user = [ADSI]$user.path

# если атрибут Должность содержит слово "отдела", то...
if ($user.title -match "отдела")

    {
    $title = $user.title
	# разделяем строку с должность, разделитель слово "отдела" и присваиваем переменной $newTitle все до разделителя,
	# удаляем пробелы в начале и в конце Trim()
    $newTitle = $($title -split '(отдела)')[0].Trim()
	# у некоторых должностей вместо "категории" стоит "кат.", заменяем его
    if ($newTitle -match "кат.")
        {
        $newTitle = $($newTitle -split '(кат.)')[0].Trim() + ' категории'
        }
	# выводим все что после слова "отдела" в переменную $department без пробелов, т.е. получается номер отдела
    $department = $($title -split '(отдела)')[2].Trim()
	# присваиваем должность без отдела в атрибут Должность
    $user.put("Title", $newTitle)
    $user.put("Description", $newTitle)
    $user.put("Department", $department)
    $user.put("Company" , "CONTOSO")
	# сохраняем изменение атрибутов
    $user.SetInfo()
    }
# у некоторых учетных записей вместо слова "отдела" "Отдел"
ElseIf ($user.title -match "Отдел")
    {
    $title = $user.title
    $newTitle = $($title -split '(Отдел)')[0].Trim()
    if ($newTitle -match "кат.")
        {
        $newTitle = $($newTitle -split '(кат.)')[0].Trim() + ' категории'
        }
    $department = $($title -split '(Отдел)')[2].Trim()
    $user.put("Title", $newTitle)
    $user.put("Description", $newTitle)
    $user.put("Department", $department)
    $user.put("Company" , "CONTOSO")
    $user.SetInfo()
    }
Else
    {
	# если в должности нет номера отдела, то просто выводим атрибут CN
    Write-Host $user.cn "-" "нет номера отдела"
    }
}

Нашли опечатку в тексте? Пожалуйста, выделите ее и нажмите Ctrl+Enter! Спасибо!


Хотите поблагодарить автора за эту заметку? Вы можете это сделать!


Автор: did5

23 Ноя 2011 в 22:42

Рубрика: PowerShell

Метки:

Ваш отзыв