null

Применение PowerShell для заполнения записей Active Directory

Имеется три города, для пользователей каждого города указывается своя улица, почтовый код, номер телефона и, логично, город. Для заполнения используется массив $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, другие версии не проверялись.