Всё о о Microsoft Exchange Server и электронной почте.

Редактирование атрибутов пользователей с помощью PowerShell

powershell Обычному администратору Exchange вполне достаточно инструментов, которые ему дают Exchange Management Console и Exchange Management Shell. Но что делать, когда их недостаточно?

В последнее время я участвую в проекте по миграции с Exchange 5.5 на Exchange 2007. В рамках этого проекта был использован скрипт, переносящий пользователей 5.5 в качестве контактов в Exchange 2007. Потребовался единоразывый перенос контактов из Exchange 5.5 в Exchange 2007. Приняли решение формировать адресные списки на основании атрибута «st» (State/Province). Создали csv файл, содержащий необходимую информацию. Атрибут «st» можно редактировать через Exchange Management Console. Но командлеты Set-Mailbox и Set-MailContact этого делать не позволяют. Что же делать?

Пользователь и контакт — это объекты Active Directory. Поэтому с их атрибутами можно работать через интерфейс ADSI из PowerShell

В результате были написан следующий скрипт

param ($FileName = «c:\contacts.csv»)

Import-Csv $FileName |
ForEach-Object -Process {
    New-MailContact -ExternalEmailAddress $_.ExternalEmailAddress `
    -Name $_.Name `
    -DisplayName $_.DisplayName `
    -PrimarySmtpAddress $_.PrimarySMTPAddress `
    -FirstName $_.FirstName `
    -LastName $_.LastName `

    -OrganizationalUnit «mydomain.com/contacts» `

    -alias $_.alias
    $Obj = [adsi]»LDAP://CN=$($_.name),OU=Contacts,DC=mydomain,DC=com»
    $Obj.psbase.InvokeSet(«st»,$_.st)
    $Obj.psbase.CommitChanges()
}

Этот скрипт создает контакты из csv файла (по умолчанию c:\contacts.csv) и записывает атрибуты, в том числе атрибут «st». Как вы видите, работа напрямую с ADSI несколько сложнее, чем с помощью командлетов Exchange. Но как я отметил раньше, как правило это и не требуется

Большое спасибо Василию Гусеву за помощь

Комментарии как всегда приветствуются 🙂

Похожие посты:

  • kkv

    О это то что мне надо 🙂
    а как добавить custom attributes сюда? или где посмотреть

  • http://www.exchangerus.ru Pavel Nagaev

    set-mailcontact, cмотрите аттрибуты
    http://technet.microsoft.com/en-us/library/aa995950(EXCHG.80).aspx

  • kkv

    вот ведь..
    смотрел аналог по команде get-mailcontact |fl
    там я не увидел CustomAttribute1

  • gdsk

    Ребят попробовал воспользоваться вашим скрипттом не не получилось, вот что пишет:

    You cannot call a method on a null-valued expression.
    At line:1 char:272

    Import-Csv «C:\test.csv» | ForEach-Object -Process {New-MailContact -Name
     $_.Name -ExternalEmailAddress $_.Email -Alias $_.al -OrganizationalUnit «posc.
    local/exchange/sibur» $Obj=[adsi]» LDAP://CN=$($_.Name),OU=sibur,OU=exchange,DC=
    posc,DC=local» $Obj.psbase.InvokeSet( <<<< «st»,$_.st) $Obj.psbase.CommitChange
    s()}

    Что это может значить?!