Исторически сложилось, что у всех учетных записи домена ActiveDirectory не заполнен атрибут «Отдел» («Department»). Информация об отделе записывалась в атрибут «Описание» и «Должность». Пример: «инженер-проектировщик 2 категории отдела 500». Практически все отделы имеют название вида: 500, 700, 990 и т.д. Начальством поставлена задача в кратчайшие сроки заполнить атрибут «Отдел» и удалить информацию об отделе из атрибутов «Описание» и «Должность».
Для решения задачи выбрал PowerShell, вот что получилось:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| # Нацеливаем скрипт на контейнер с учетными записями в домене Contoso.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 "-" "нет номера отдела" } } |
Комментариев нет:
Отправить комментарий