sergey vasin

The IT blog

Используем PowerShell для стандартизации поля Title в Active Directory — Hey, Scripting Guy! Blog

leave a comment »

Находим и исправляем различные варианты полей Job Title в Active Directory

Хранение информации в Active Directory Domain Services – это замечательно, потому как служба каталогов становится централизованным хранилищем информации о пользователях. Проблема возникает тогда, когда вы пытаетесь выполнить поиск по фразе “Senior Network Engineer” в глобальной адресной книге Outlook, но вследствие того, что некоторые из сетевых инженеров заданы как “Sr. Network Engineer” то ваш поиск выведет вам далеко не весь список.

Пост за вторник детально описывает эту ситуацию, и я провел последние пару дней, настраивая тестовую среду. Сегодня я буду проводить поиск в некоторой OU тестового домена используя нижеследующие варианты названия должности главного сетевого инженера, и исправлю все эти варианты на “Senior Network Engineer”. Разные варианты нужной нам должности следующие:

Sr. NetEng

SR. NetEng

Senior NetEng

Sr. Network Engineer

sr. network engineer

sr. neteng

Senior Network Engineer

Sr. Net Eng

SR NET ENG

SR. NETENG

Чтобы убедиться, что вам теперь известны все варианты написания этой должности, используйте командлет Get-ADUser для поиска в нужной OU и сгруппируйте по полю Title. Команда приведена ниже.

PS C:\> Get-ADUser -SearchBase ‘ou=testou,dc=iammred,dc=net’ -Filter * -Properties title | group title -NoElement

Count Name

—— —-

11 Senior NetEng

39 SR. NETENG

6 Senior Network Engineer

17 Sr. Net Eng

23 Sr. Network Engineer

4 SR NET ENG

Я создал переменную $title и в качестве значения задал массив различных написаний должности главного сетевого инженера. Я не стал добавлять в переменную само значение “Senior Network Engineer”, поскольку нам не нужно заменять это значение на себя самого. Используемый нами массив:

$title = @(

‘Sr. NetEng’,

‘SR. NetEng’,

‘Senior NetEng’,

‘Sr. Network Engineer’,

‘sr. network engineer’,

‘sr. neteng’,

‘Sr. Net Eng’,

‘SR NET ENG’,

‘SR. NETENG’)

Далее я создал переменную для хранения нового названия должности. Это будет “Senior Network Engineer”.

$newtitle = ‘Senior Network Engineer’

Теперь я импортирую модуль Active Directory и воспользуюсь командлетом Get-ADUser для поиска пользователей с различными написаниями должности. Искать мы будем в определенной OU. В качестве фильтра я указал *, и добавил свойства Title и Description к выводу команды

Get-ADUser -SearchBase ‘ou=testou,dc=iammred,dc=net’ -Filter * `

-Properties Title, Description

Возвращенный командой объект передается командлету Foreach-Object. В скриптблоке process (process – это параметр по умолчанию командлета Foreach-Object и зачастую не указывается)  я использовал структуру if для определения содержится ли в массиве $title значение свойства Title объекта пользователя AD. Оператор contains не чувствителен к регистру, поэтому он будет определять как значения “Sr NetEng”, так и “SR NETENG”. Хотя он не среагирует на “SENIOR NETWORK ENGINEER”, но мои предыдущие команды показали, что такого варианта в нашем случае не существует, поэтому я решил использовать нечувствительный к регистру поиск.

Foreach-Object {

if ($title -contains $_.title)

При нахождении совпадения, я использую командлет Set-ADUser и назначу содержимое переменной $newtitle свойствам Title и Description объекта пользователя. К счастью, оба этих атрибута могут быть указаны через стандартные параметры, поэтому процесс получается довольно простым.

Set-ADUser -identity $_ -Title $newtitle -Description $newtitle

Полный текст скрипта SetStandardADTitle.ps1:

The complete SetStandardADTitle.ps1 script is shown here.

# ——————————————————————————

# Script: SetStandardADTitle.ps1

# Author: ed wilson, msft

# Date: 10/30/2012 11:54:48

# Keywords: Active Directory, User Accounts

# comments:

# HSG-11-1-2012

# ——————————————————————————

$title = @(

‘Sr. NetEng’,

‘SR. NetEng’,

‘Senior NetEng’,

‘Sr. Network Engineer’,

‘sr. network engineer’,

‘sr. neteng’,

‘Sr. Net Eng’,

‘SR NET ENG’,

‘SR. NETENG’)

$newtitle = ‘Senior Network Engineer’

Import-Module ActiveDirectory

Get-ADUser -SearchBase ‘ou=testou,dc=iammred,dc=net’ -Filter * `

-Properties Title, Description |

Foreach-Object {

if ($title -contains $_.title)

{

Set-ADUser -identity $_ -Title $newtitle -Description $newtitle

}

}

В завершение я нажму на клавишу со стрелкой вверх в окне Windows PowerShell ISE для вызова моей предыдущей команды, чтобы удостовериться, что скрипт отработал как следует.

PS C:\> Get-ADUser -SearchBase ‘ou=testou,dc=iammred,dc=net’ -Filter * -Properties title | group title -NoElement

Count Name

—— —-

100 Senior Network Engineer

Получилось.

Неделя Active Directory продолжится завтра, где я расскажу о установке местонахождения пользователя через PowerShell.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/01/use-powershell-to-standardize-titles-in-active-directory.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Ноябрь 1, 2012 в 16:55

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s