Имеется три города, для пользователей каждого города указывается своя улица, почтовый код, номер телефона и, логично, город. Для заполнения используется массив $arr = @( ... ), каждый его элемент содержит все сведения для заполнения. Поле ldap содержит OU в котором следует осуществлять перебор аккаунтов. Остальные поля (city, post, street, phone) обновляют соответствующие поля в AD (City, PostalCode, StreetAddress, officePhone).
Внешний цикл (строка 25) перебирает элементы массива. Во вложенном цикле происходит следующее:
строка 27 - выбирается очередной аккаунт из AD.
строки 29-33 - если у пользователя указан номер IP-телефона (он же внутренний номер), то его следует добавить как extention к основному номеру.
строки 34-38 - если у пользователя заполнено поле Department, менять его не следует, иначе заполнить стандартным значением.
строка 40 - выполняет непосредственно обновление аккаунта.
$arr = @(
@{
ldap = "OU=USERS,OU=MOSCOW,OU=LOLME,DC=two,DC=one,DC=com";
city = "Moscow";
post = "345345";
street = "Rasprekrasnaya, 1";
phone = "+7 (419) 345-67-89"
}
@{
ldap = "OU=USERS,OU=URUPINSK,OU=LOLME,DC=two,DC=one,DC=com";
city = "Urupinsk";
post = "123456";
street = "Sosisok street, 19";
phone = "+7 (666) 345-67-89"
}
@{
ldap = "OU=USERS,OU=CITY3,OU=LOLME,DC=two,DC=one,DC=com";
city = "City3";
post = "654321";
street = "Ceduh volos street, 72";
phone = "+7 (999) 111-11-11"
}
)
foreach ($a in $arr)
{
foreach ($user in Get-ADuser -Filter * -SearchBase $a.ldap -Properties Department, IPphone)
{
$phone = $a.phone
if ( $user.IPphone -ne $null -and $user.IPphone -ne '' )
{
$phone = "$phone (ext. "+ $user.IPphone +")"
}
$depart = "DEFAULT"
if ( $user.Department -ne $null -and $user.Department -ne '' )
{
$depart = $user.Department
}
Set-ADuser $user -City $a.city -PostalCode $a.post -StreetAddress $a.street -officePhone $phone -Department $depart
}
}
Одно дело сделано. Следующий скрипт актуализирует номера мобильных телефонов, вытаскивая их из .csv файла:
$file = "user_mobile_phones.csv"
foreach ($u in Import-csv "$file")
{
$email = $u.email
Get-ADuser -Filter "EmailAddress -eq '$email'" -Properties Mobile | Set-ADuser -Mobile $u.tel
}
Формат .csv файла простой: первая строка - заголовоки столбцов, столбца всего два - email и tel. Скрипт ищет аккаунты в AD, рассчитывая, что e-mail адреса уникальны (в целевой инфраструктуре это именно так). Найденному аккаунту присваивается новый номер мобильного телефона.
Вот в принципе и всё, хотя можно ещё прикрутить логирование изменений, но в целях упрощения кода это умышленно не сделано.
Скрипты исполнялись в PowerShell 3, другие версии не проверялись.